当前位置: 首页 > 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

相关文章:

  • 个人关于ChatGPT的用法及建议
  • 颠覆传统:探索Web3对传统计算机模式的冲击
  • Linux-struct list_head的快速使用
  • TPL0401B使用教程
  • springboot+vue的养老院管理系统
  • 【机器学习】让大模型变得更聪明
  • C#根据数据量自动排版标签的样例
  • 【CPP】栈简介及简化模拟实现
  • C语言学习笔记之结构体(一)
  • Android 车载 Audio 中 有关系统按键无声的问题排查小结
  • qi5uxeel算法分析流程记录libmsec.so
  • 14.微信小程序之地理定位功能
  • OSG学习记录
  • uniapp条件编译
  • object对象列表使用sorted函数按照对象的某个字段排序
  • 【391天】每日项目总结系列128(2018.03.03)
  • hadoop集群管理系统搭建规划说明
  • Laravel5.4 Queues队列学习
  • mysql常用命令汇总
  • php的插入排序,通过双层for循环
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 关于extract.autodesk.io的一些说明
  • 关于使用markdown的方法(引自CSDN教程)
  • 诡异!React stopPropagation失灵
  • 聊聊redis的数据结构的应用
  • 突破自己的技术思维
  • 王永庆:技术创新改变教育未来
  • 微服务入门【系列视频课程】
  • 用mpvue开发微信小程序
  • 优化 Vue 项目编译文件大小
  • Semaphore
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # Kafka_深入探秘者(2):kafka 生产者
  • # windows 安装 mysql 显示 no packages found 解决方法
  • $$$$GB2312-80区位编码表$$$$
  • $().each和$.each的区别
  • $jQuery 重写Alert样式方法
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (七)Java对象在Hibernate持久化层的状态
  • (转)人的集合论——移山之道
  • .gitignore
  • .NET Core 项目指定SDK版本
  • .NET Core引入性能分析引导优化
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 调用海康SDK以及常见的坑解释
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .Net小白的大学四年,内含面经
  • // an array of int
  • /var/lib/dpkg/lock 锁定问题
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @RequestMapping处理请求异常
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器