当前位置: 首页 > news >正文

【算法】贪心算法——柠檬水找零

题解:柠檬水找零(贪心算法)

目录

  • 1.题目
  • 2.题解
  • 3.参考代码
  • 4.证明
  • 5.总结

1.题目

题目链接:LINK
在这里插入图片描述

2.题解

分情况讨论 + 贪心算法

  • 当顾客为5元时,收下
  • 当顾客为10元时,收下10元并找回5元
  • 当顾客为20元时,收下20元并找回10+5元或者5+5+5元

这里仅20元时候找钱会有分歧,所以这里我们用贪心算法,即优先留下尽可能多的5元,尽快把10元扔出去。

原因:5元是“万金油”,既可以给10元找零,也可以给20元找零,但是10元就不能给10元找零。

3.参考代码

class Solution {
public:bool lemonadeChange(vector<int>& bills) {//哈希数组int arr[2] = {0};//0:5元 1:10元for(auto& money: bills){if(money == 5) arr[0]++;else if(money == 10) arr[1]++,arr[0]--;// 收钱 + 找钱else{//收钱arr[2]++;//找钱if(arr[1] >= 1 && arr[0] >= 1) arr[1]--,arr[0]--;else arr[0]-=3;} if(arr[0] < 0) return false;}return true;}
};

4.证明

证明思路:交换论证法
如果最优解和贪心解可以相互交换,即证明贪心解法有效。
注:最优解这里可以认为一定正确的解法。

因为在顾客给5元或者10元时候,找钱策略是唯一的,因而没有区别,我们这里只讨论顾客给20元的场景。

如果顾客给20元,
贪心算法:10 + 5元
最优解:5+5+5(可能,我们讨论最优解也为10 + 5的没意义)

如果这样,区别就在于一个10元的问题。
当这个10元在后面没有用,那么贪心解和最优解一致,因为这个10元没有用。
当这个10元在后面用到了,无非就是下面这种情况,可以看到无非贪心解和最优解顺序不一样而已。
在这里插入图片描述
在某种程度上,我觉得贪心算法一定是正确解法的一种,所以这个题贪心算法是正确的。

5.总结

在这里插入图片描述


EOF

http://www.lryc.cn/news/359581.html

相关文章:

  • Jmeter安装教程
  • 关于磁盘管理
  • 人大金仓数据库大小写不敏感确认
  • 【Java】还有人不懂继承?25 个 Case 包教包会
  • Qt实现窗口失去焦点抖动功能
  • Flink 数据源
  • 在本地电脑中如何用命令操作远程服务器上的数据库
  • uniApp子组件监听数据的变化的方法之一
  • Python容器化技术的15个Docker实践
  • QT天气预报项目(写在简历上)
  • 从零到一建设数据中台 - 数据可视化
  • 一步步实现知乎热榜采集:Scala与Sttp库的应用
  • Windows和Linux系统部署Docker(2)
  • PyCharm中快速搭建Python虚拟环境的指南
  • C++模板元编程
  • Lambda表达式与函数式接口
  • Java字符串String详解
  • 互联网政务应用安全管理规定:使用安全连接方式访问
  • 安全测试用例及解析(Word原件,直接套用检测)
  • github将默认分支main改为master
  • java.lang.NoClassDefFoundError: org/dom4j/io/SAXReader
  • 读后感:《SQL数据分析实战》运营SQL实用手册
  • 建设人工智能平台,主流GPU卡选型分析
  • RTSPtoWebRTC、RTSPtoWeb ( 自HTML播放):页面中预览摄像机视频,无插件的播放方式,适合局域网使用,无需流媒体服务器
  • C语言| 三个整数从小到大排序
  • C语言基础编程题目解析:探索逻辑与算法的奥秘
  • jmeter基础入门练习题
  • 大数据技术原理(三):HDFS 最全面的 API 操作,你值得收藏
  • Flink系列二:DataStream API中的Source,Transformation,Sink详解(^_^)
  • 最好的电脑数据恢复软件是什么