【贪心算法】专题练习一

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:那个传说中的man的主页
🏠个人专栏:题目解析
🌎推荐文章:题目大解析(3)

在这里插入图片描述


前言
1.什么是贪心算法?——贪婪+鼠目寸光

贪心策略:解决问题的策略,局部最优->全局最优
(1)即把解决问题的过程分为若干步
(2)解决每一步的时候吗,都选择当前看起来“最优的”解法
(3)希望得到全局最优解

2.贪心算法的特点
(1) 贪心策略的提出是没有标准以及模板的
(2) 可能每一道题的贪心策略都是不同的
(3)贪心策略的正确性:可能会出错;正确的贪心策略,我们是需要“证明的”

3.证明贪心策略的方法:数学中见过的所有证明方法

4.学习贪心的方向
(1):遇到不会的贪心题,很正常,把心态放平
(2):把策略当成经验吸收
(3):能证明则证明贪心策略的正确性


目录

  • 👉🏻柠檬水找零
    • 证明
  • 👉🏻将数组和减半的最少操作次数
    • 证明
    • priority_queue
      • 注意事项

👉🏻柠檬水找零

原题链接:柠檬水找零

mycode:

class Solution {
public:bool lemonadeChange(vector<int>& bills) {int five = 0,ten = 0,twenty = 0;for(auto e:bills){if(e==5){five++;}else if(e==10){ten++;if(--five<0)return false;}else if(e==20){twenty++;//10+5 && 5+5+5 都不可以才找零失败int tmp1 = ten,tmp2 = five,tmp3 = five;if(--tmp1>=0&&--tmp2>=0){--ten;--five;}else if((tmp3-=3)>=0){five-=3;}elsereturn false;}}return true;}
};

证明

交换论证法
在这里插入图片描述

👉🏻将数组和减半的最少操作次数

原题链接:将数组和减半的最少操作次数

mycode:

class Solution {
public:int halveArray(vector<int>& nums) {priority_queue<double> heap;//默认大堆double sum = 0.0;for(auto e:nums){heap.push(e);sum+=e;}sum/=2.0;int count = 0;while(sum>0){double t = heap.top()/2.0;heap.pop();sum-=t;count++;heap.push(t);}return count;}
};

在这里插入图片描述

证明

在这里插入图片描述

priority_queue

当涉及到按照特定顺序处理元素时,C++ 的 std::priority_queue 是一个非常有用的容器适配器。它是一个基于堆的数据结构,用于实现优先级队列。在优先级队列中,元素按照其优先级被处理,具有较高优先级的元素先被处理。

以下是 std::priority_queue 的基本特征和用法:

包含头文件

#include <queue>

创建优先级队列

std::priority_queue<int> pq;  // 创建一个默认的最大堆

插入元素

pq.push(10);
pq.push(5);
pq.push(20);

访问顶部元素

int topElement = pq.top();  // 获取最高优先级的元素,但不删除

删除顶部元素

pq.pop();  // 删除最高优先级的元素

自定义比较函数
如果你想要自定义元素的比较方式,可以通过提供自定义比较函数来实现。以下是一个示例,创建一个最小堆:

#include <functional>std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap;

或者,你也可以自定义比较函数

struct Compare {bool operator()(int a, int b) {// 自定义比较逻辑,返回 true 表示 a 的优先级高于 breturn a > b;}
};std::priority_queue<int, std::vector<int>, Compare> customQueue;

注意事项

  • 默认情况下,std::priority_queue 是一个最大堆,但你可以通过提供第三个参数(比较函数)来改变其行为。
  • std::priority_queue 不提供迭代器访问元素的方式,因为堆不是线性结构。
  • 在使用自定义比较函数时,确保比较函数是严格弱序(strict weak ordering),以确保正确的行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/300876.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jsonhandle 插件下载

网盘地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1hj4GKuGNyDNP2JzsJTLFtg 提取码&#xff1a;87rw 1.打开谷歌浏览器&#xff0c;选择扩展程序&#xff0c;记得选择为开发者模式&#xff0c;然后把下载好的CRX文件拖进去就行了

腾讯云2核4G服务器CVM标准型S5实例5年优惠价格表

腾讯云服务器续费贵所以一次性买3年或5年&#xff0c;腾讯云轻量应用服务器3年价格有优惠&#xff0c;CVM云服务器5年有特价&#xff0c;腾讯云3年轻量和5年云服务器CVM优惠活动入口&#xff0c;3年轻量应用服务器配置可选2核2G4M和2核4G5M带宽&#xff0c;5年CVM云服务器可以选…

AI赋能金融创新:ChatGPT引领量化交易新时代

文章目录 一、引言二、ChatGPT与量化交易的融合三、实践应用&#xff1a;ChatGPT在量化交易中的成功案例四、挑战与前景五、结论《AI时代Python量化交易实战&#xff1a;ChatGPT让量化交易插上翅膀》&#x1f4da;→ [当当](http://product.dangdang.com/29658180.html) | [京东…

Git一文全解

笔记是学习黑马记的&#xff0c;视频地址 传送门 1. Git初识 1.1 版本控制器的分类 集中式版本控制工具&#xff1a;集中式版本控制工具&#xff0c;版本库是集中存放在中央服务器的&#xff0c;每个开发从中央服务器下载代码&#xff0c;是必须联网才能工作&#xff0c;局域…

大疆L1激光点云数据处理(DJI Terra-大疆智图)

大疆L1激光点云数据处理 前言处理步骤查看成果 前言 大疆L1是一个激光雷达载荷&#xff0c;该载荷包括一个激光点云传感器和一个可见光传感器。截止2023年12月&#xff0c;已经发布了升级版L2&#xff0c;本文以L1获取的数据为例。 在使用L1的时候&#xff0c;应该开启RTK模式…

PYTHON交互式调试利器JUPYTER NOTEBOOK

Jupyter Notebook&#xff08;此前被称为 IPython notebook&#xff09;是一个交互式笔记本&#xff0c;支持运行 40 多种编程语言。 Jupyter Notebook 的本质是一个 Web 应用程序&#xff0c;便于创建和共享程序文档&#xff0c;支持实时代码&#xff0c;数学方程&#xff0c;…

行业报告 | 中国AI大模型成长之路,披荆斩棘创佳绩

原创 | 文 BFT机器人 前言&#xff1a; 相信大家现在对于AI大模型这个概念都清楚&#xff0c;毕竟现在AI大模型渗入到了我们各个生活场景中&#xff0c;这股科技之风吹遍了中国大大小小的城市&#xff0c;近年来看&#xff0c;还有越吹越烈之势。今天小编带你们来了解一下我国…

智慧幼儿园视频监管方案及实施建议:AI智能技术构建新引擎

一、背景需求 随着科技的快速发展&#xff0c;智慧化监管已成为幼儿园管理的重要趋势。智慧幼儿园监管解决方案通过引入先进的技术手段&#xff0c;提高幼儿园的管理效率&#xff0c;保障幼儿的安全与健康&#xff0c;为家长提供更便捷的服务。为了保障幼儿的安全&#xff0c;…

性能优化,让用户体验更加完美(渲染层面)

前言 上一篇我们已经围绕“网络层面”探索页面性能优化的方案&#xff0c;接下来本篇围绕“浏览器渲染层面”继续开展探索。正文开始前&#xff0c;我们思考如下问题&#xff1a; 浏览器渲染页面会经过哪几个关键环节&#xff1f;“渲染层面”的优化从哪几方面着手&#xff1f…

SMART PLC优先启动功能块

对于多设备控制,有时启动时需要根据运行时间最短的设备优先启动,对于这种根据设备运行时间优先启动最短时间的场合,我们构造一个功能块。下面我们看下系统要求。 1、优先启动 上图的功能块是2选1功能块,在2台设备里进行启动优先选择。 2、2选1优先启动 3、接口+程序部分…

安装Nginx

进入官网 选择要安装的版本(这里选择Stable version 稳定版) 解压 目录说明 conf&#xff1a;顾名思义&#xff0c;这里是用来存放配置文件的目录&#xff0c;这里最为主要的是 nginx.conf 这个文件&#xff0c;这个是Nginx的主配置文件。若以后需要手动添加其它的配置文件&…

可移动磁盘拒绝访问怎么办?5种有效解决方法

在使用可移动磁盘时&#xff0c;有时会遇到拒绝访问的情况&#xff0c;这可能会给我们的工作和生活带来很大的困扰。本文将介绍几种解决可移动磁盘拒绝访问的有效方法&#xff0c;帮助读者解决这一问题。 可移动磁盘拒绝访问怎么解决 1、检查磁盘连接 确保磁盘正确连接到计算…