【C++】零钱兑换的始端---柠檬水找零

欢迎来CILMY23的博客

本篇主题为 零钱兑换的始端---柠檬水找零

个人主页:CILMY23-CSDN博客

个人专栏系列: Python | C++ | C语言 | 数据结构与算法

感谢观看,支持的可以给个一键三连,点赞关注+收藏。


 前言:

柠檬水找零:860. 柠檬水找零 - 力扣(LeetCode)


一、题目解析

 

从题目中我们可以知道以下信息:

  1.  一开始我们手头没有任何零钱,如果我们一开始没有净交易,那么后续是无法找零钱的
  2.  顾客一次只买一杯,按照账单bill支付的顺序
  3. 正确找零返回true,错误或者无法找零返回false
  4. 顾客只会给我找币值5,10,20美元

二、原理和代码

 首先,顾客只会给我三种币值的美元,所以我对这三种情况讨论:

 那根据贪心,我们会尽可能保留5美元的,把币值大的先找出去。

代码如下: 

class Solution {
public:bool lemonadeChange(vector<int>& bills){int five = 0;int ten = 0;for (auto x : bills){if (x == 5){five++;}elseif(x == 10){if(five == 0)return false;five--;ten++;}else{if(ten && five){ten--;five--;}elseif(five >= 3){five -= 3;}elsereturn false;}}return true;}
};

三、贪心策略的证明

 证明策略:交换论证法

 证明目的:把最优解逐步通过交换调整为贪心解

 证明过程:

假设贪心解是 a b c d e f ,最优解(正确解)是 E B C D A F ,在不破坏最优解“最优性质”和“正确”的前提下,把最优解调整为贪心解。对上述三种情况进行讨论:

假设顾客只找给我5美元和十美元,最优解和贪心解是没区别的,它们只有三种情况,5美元收下,找五美元和没零钱找不了。

所以重点讨论的地方就是顾客给我二十美元,贪心和最优解不一样的时候怎么办?

假设后面没用到十美元交换,我们可以用十美元来替代我第一次交换的两张5美元

假设后面有用到十美元交换,我们可以用前面第一次的两张5美元来交换后面的十美元,即调整顺序并不影响最优和正确性,于是所有情况我们都论证完毕了。贪心解就是最优解。 

 


 感谢各位同伴的支持,本期C++就讲解到这啦,如果你觉得写的不错的话,可以给个一键三连,点赞,关注+收藏,若有不足,欢迎各位在评论区讨论。  

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

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

相关文章

万兆以太网MAC设计(13)主机与FPGA之间进行PING

文章目录 前言&#xff1a;一、ICMP校验和计算二、上板效果1、终端命令行1、wireshark捕捉 前言&#xff1a; 在上板尝试进行PING操作的时候&#xff0c;发现一直是请求超时的情况&#xff0c;结果排查发现是首部校验和没有计算的问题。在UDP层&#xff0c;我们不进行校验和是…

ROS 2边学边练(45)-- 构建一个能动的机器人模型

前言 在上篇中我们搭建了一个机器人模型(其由各个关节&#xff08;joint&#xff09;和连杆&#xff08;link&#xff09;组成)&#xff0c;此篇我们会通过设置关节类型来实现机器人的活动。 在ROS中&#xff0c;关节一般有无限旋转&#xff08;continuous&#xff09;,有限旋转…

【每日力扣】543. 二叉树的直径与101. 对称二叉树

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害 543. 二叉树的直径 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的…

芋道源码的Springboot 项目打包,配置和依赖包分开

Springboot 项目&#xff0c;把依赖包和开发的应用都打在一个jar 里很简单&#xff0c;但有个问题是&#xff0c;修改点东西就要再次全量更新。 这里介绍如何用assembly 来实现不打依赖包。 1、 在主模块中&#xff0c;需要引入 assembly.xml配置&#xff1a; src/main/asse…

DUX 主题 版本:8.2 WordPress主题优化版

主题下载地址&#xff1a;DUX 主题优化版.zip 支持夜间模式、快讯、专题、百度收录、人机验证、多级分类筛选&#xff0c;适用于垂直站点、科技博客、个人站&#xff0c;扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、自动缩略图

如何通过wifi网络将串口数据发送到多个设备

摘要&#xff1a;当lora电台的速率无法满足高速传输时&#xff0c;可以考虑用“串口服务器”。本文介绍一下如何使用TP-LINK的TL-CPE300D实现一对多的数据发送。 当前也有使用lora电台的&#xff0c;但是lora电台支持的速率有限&#xff0c;可能最大支持到9600&#xff0c;甚至…

python数据分析所需要了解的结构基础

Python语言基础——结构基础 前言一、列表列表的介绍列表的语法示例注意要点符号元素切片运算符示例 二、字典字典的介绍字典的特点字典的语法 三、元组元组的介绍元组的语法示例 四、字符串字符串的介绍字符串的语法 五、操作运算符算术运算符赋值运算符比较运算符逻辑运算符位…

CMake创建跨平台OPenGL工程(学习笔记)

一、跨平台环境基本配置 1、环境搭建 1&#xff09;linux OpenGL环境搭建参考&#xff1a;ubuntu18.04 OpenGL开发&#xff08;显示YUV&#xff09;_ubuntu opengl-CSDN博客 https://blog.51cto.com/cerana/6433535 2&#xff09;windows下环境搭建 OpenGLVisual Studio20…

TensorFlow、pytorch和python对应的版本关系

安装深度学习框架的时候需要考虑版本的关系&#xff0c;不然装了用不了就尴尬了。 深度学习首先得问题就是用CPU跑&#xff0c;还是GPU跑。。当然有英伟达显卡的都想用GPU跑&#xff0c;不然买显卡是做啥、、GPU跑得多块&#xff0c;一下就训练完了。但是有的同学没得gpu&…

操作系统——进程控制

创建进程 fork fork是一个系统调用函数&#xff0c;用来创建子进程&#xff0c;通过多个执行流完成任务。子进程和父进程共用一份代码&#xff0c;子进程数据使用写时拷贝&#xff0c;即子进程数据在创建的时候和父进程相同&#xff0c;但是当要修改数据的时候&#xff0c;子进…

【FreeRTOS 快速入门】-- 1、STM32工程移植FreeRTOS

目录 一、新建STM32工程 为了示范完整的移植过程&#xff0c;我们从0开始&#xff0c;新建一个标准的STM32点灯工程。 &#xff08;本篇以CubeMX作示范&#xff0c;CubeIDE操作近同&#xff0c;可作对比参考&#xff09; 1、新建工程 选择 芯片型号 新建工程 2、搜索芯片型号…

win10 远程桌面无法连接,解决Win10远程桌面无法连接问题的方法

Windows 10操作系统中&#xff0c;远程桌面是一项非常实用的功能&#xff0c;它允许用户从另一台设备远程访问和控制另一台计算机。然而&#xff0c;有时候用户可能会遇到Win10远程桌面无法连接的问题。本文将探讨可能导致这个问题的原因&#xff0c;并提供相应的解决方案。 确…