代码随想录35——贪心:860柠檬水找零、406根据身高重建队列、452用最少数量的箭引爆气球
文章目录
- 1.860柠檬水找零
- 1.1.题目
- 1.2.解答
- 2.406根据身高重建队列
- 2.1.题目
- 2.2.解答
- 3.452用最少数量的箭引爆气球
- 3.1.题目
- 3.2.解答
1.860柠檬水找零
参考:代码随想录,860柠檬水找零, 力扣题目链接
1.1.题目
1.2.解答
只需要维护三种金额的数量,5,10和20。
有如下三种情况:
- 情况一:账单是5,直接收下。
- 情况二:账单是10,消耗一个5,增加一个10
- 情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5
此时大家就发现 情况一,情况二,都是固定策略,都不用我们来做分析了,而唯一不确定的其实在情况三。而情况三逻辑也不复杂甚至感觉纯模拟就可以了,其实情况三这里是有贪心的。
账单是20的情况,为什么要优先消耗一个10和一个5呢?
因为美元10只能给账单20找零,而美元5可以给账单10和账单20找零,美元5更万能!
所以局部最优:遇到账单20,优先消耗美元10,完成本次找零。全局最优:完成全部账单的找零。
代码如下,非常简单:
bool lemonadeChange(vector<int> &bills)
{int five = 0, ten = 0, twenty = 0;for (auto &bill : bills){// 5元:直接收下if (bill == 5){five++;}// 10元:判断如果可以找零则收下,否则直接返回else if (bill == 10){if (five > 0) // 还有5元的{five--;ten++;}else{return false;}}// 20元:判断如果可以找零则收下,否则直接返回else{if (five > 0 && ten > 0) // 1.优先用10+5找零{five--;ten--;twenty++;}else if (five >= 3) // 2.再用5+5+5找零{five -= 3;twenty++;}else // 3.最后无法找零,返回false{return false; }}}return true;
}
2.406根据身高重建队列
参考:代码随想录,406根据身高重建队列,力扣题目链接
2.1.题目
2.2.解答
这道题目不是很难,但是没有弄得特别明白,直接去看代码随想录上的讲解吧。。。
class Solution
{private:// 这里必须是static,为什么?static bool compare(const vector<int>& a, const vector<int>& b){if(a[0] == b[0]) // 如果身高相同,则按照序号小的在前进行排列return a[1] < b[1];return a[0] > b[0]; // 身高不同则按照身高排列,身高高的在前}
public:vector<vector<int>> reconstructQueue(vector<vector<int>> &people){// 1.先对people按照身高从高到低进行排列,如果身高相同,则按照后面的序号小的在前进行排序sort(people.begin(), people.end(), compare);vector<vector<int>> result; // 最终结果for(int i = 0; i < people.size(); i++){int pos = people[i][1]; // 在最终结果中的位置result.insert(result.begin()+pos, people[i]); // 在对应位置插入}return result;}
};
3.452用最少数量的箭引爆气球
参考:代码随想录,452用最少数量的箭引爆气球,力扣题目链接
3.1.题目
3.2.解答
也不是很难,但是直接做也是想不出来,直接看代码随想录的讲解吧。。。
ps:越刷越觉得贪心的题真是没意思。。。
class Solution
{private:static bool compare(const vector<int>& a, const vector<int>& b){return a[0] < b[0]; // 按照起点开始排序}
public:int findMinArrowShots(vector<vector<int>> &points){if(points.empty())return 0;sort(points.begin(), points.end(), compare);int result = 1;for(int i = 1; i < points.size(); i++){if(points[i][0] > points[i-1][1]) // 当前气球开始位置 > 上一个气球结束位置result++;else // 当前气球和上一个气球有重复位置points[i][1] = min(points[i][1], points[i-1][1]); // 更新其中终止位置}return result;}
};
代码随想录35——贪心:860柠檬水找零、406根据身高重建队列、452用最少数量的箭引爆气球相关推荐
- 代码随想录算法训练营第35天|860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球
代码随想录算法训练营第35天|860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球 860.柠檬水找零 406. 根据身高重建队列 452. 用最少数量的箭引爆气球 860. ...
- Suzy想吃烤蛋挞了Day35 | 贪心算法进行时:860. 柠檬水找零,406. 根据身高重建队列,452. 用最少数量的箭引爆气球
860. 柠檬水找零 solution 不要漏掉的一种情况是:如果收到了20,可以找10+5,或者5+5+5 class Solution:def lemonadeChange(self, bills ...
- 452. 用最少数量的箭引爆气球(贪心算法+思路+详解)07
一:题目 在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了.开始坐标总是小于结束 ...
- leetcode 452. 用最少数量的箭引爆气球(贪心算法)
在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了.开始坐标总是小于结束坐标. 一 ...
- 力扣记录:贪心算法3较难(1)区间问题——55 跳跃游戏,45 跳跃游戏II,452 用最少数量的箭引爆气球,435 无重叠区间,763 划分字母区间,56 合并区间
本次题目 55 跳跃游戏 45 跳跃游戏II 452 用最少数量的箭引爆气球 435 无重叠区间 763 划分字母区间 56 合并区间 55 跳跃游戏 局部最优:不管每次跳多少步,取最大跳跃步数,若覆 ...
- c语言贪心算法合并箭,贪心算法:用最少数量的箭引爆气球
❝ 通知:一些录友表示经常看不到每天上午的文章,现在公众号已经不按照发送时间推荐了,而是根据一些规则乱序推送,所以可能关注了「代码随想录」也一直看不到文章,建议把「代码随想录」设置星标哈,设置星标之后 ...
- LeetCode每日一题--860. 柠檬水找零(贪心)
题目:跳转至 860. 柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元 ...
- 笔记1 第11课 贪心初步 ——柠檬水找零,分发饼干,跳跃游戏,完成所有任务所需最小能量——极客时间算法
之前收藏了极客时间的算法训练营3期 共21课,计划每一课写博客来记录学习,主要形式为 方法类型1 题1 题解 题2 题解 方法类型2 题1 题解 -- 题目大体来自leetcode 和 acwing ...
- leetcode.860. 柠檬水找零
860. 柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元.10 美元或 ...
最新文章
- python 匿名函数的使用
- 谁来担责!无人驾驶汽车还需要汽车保险吗?
- 创业公司Starry拟推1G网速的无线宽带服务
- 数字图像处理:第二十二章 基于模型的编码
- 怎么求导来着?别费劲了,试试这个Python的通用求导法
- 排查访问Linux Server速度较慢的问题
- STM32F103构建固件库模板(PS固件库文件树介绍)
- 水彩手绘中华美食PNG素材,提高海报设计效率!
- 从一句SQL得出的启示
- 【VS2010学习笔记】【函数学习】二(SetTimer()函数)
- 慢日志之一:开启mysql慢查询日志并使用mysqldumpslow命令查看,分析诊断工具之四...
- MyEclipse10.6 安装SVN插件方法及插件下载地址
- 语言(文化)代码与国家地区对照表
- 快速达成目标的12种方
- 极验验证——滑块拼图验证码
- VA_LIST可变参数列表的使用方法与原理
- 最新中文行业垂直搜索引擎大全
- win10锁屏c语言,Win10锁屏状态怎么设置打开任意应用程序?
- 电子元器件行业SCM供应链平台降低管理成本,提升供应链系统效率
- 基于VNPY实现网格策略实盘(币圈)
热门文章
- 风扇空调等 低功耗抗干扰三键/3键3路3通道触摸(Touch)触控IC-VK3603 ESOP8 灵敏度高抗干扰能力强,FAE技术支持,带16S自动复位防呆功能
- 超外差收音机原理总结
- 互联网公司大牛-100强
- 8086cpu中,FR寄存器的标志位
- 显示器属于计算机网络连接设备吗,下列属于计算机外部设备的是()。A.调制解调器B.音箱C.硬盘D.扫描仪E.显示器...
- Redis案例实战_微信抢红包
- nyoj 关于521
- py语法基础010_字符串操作
- 财务分析之产品营业利润分析
- 【答辩问题】计算机专业本科毕业设计答辩指导