贪心法之柠檬水找零

题目: 

在柠檬水摊上,每一杯柠檬水的售价为 5 美元。 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。 每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。 你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。 如果你能给每位顾客正确找零,返回 true ,否则返回 false 。

示例 1: 输入:[5,5,5,10,20] 输出:true

思路:

  1. 设置两个变量 five_countten_count 分别表示手里拥有的 5 美元和 10 美元的数量,初始值都为 0。

  2. 遍历每个顾客支付的金额,如果是 5 美元,则不需要找零;如果是 10 美元,则需要找回 5 美元;如果是 20 美元,则需要找回 15 美元。

  3. 对于 10 美元的找零,我们需要首先判断手里是否有足够的 5 美元来找零。如果有,则将 five_count 减 1,将 ten_count 加 1;如果没有,则无法找零,返回 false

  4. 对于 20 美元的找零,我们需要优先使用一张 10 美元和一张 5 美元来找零,因为这样可以让手里的 5 美元硬币更多,以备后续使用。如果手里没有足够的 10 美元和 5 美元,则可以使用三张 5 美元来找零。如果无法找零,返回 false

  5. 如果所有顾客的交易都能正确找零,最终返回 true

代码:

#include <iostream>
using namespace std;
#include <vector>// 找零函数,接受一个整数向量表示账单,返回是否能找零的布尔值
bool lemonadeChange(vector<int>& bills) {int five_count = 0;  // 5 美元钞票数量int ten_count = 0;   // 10 美元钞票数量// 遍历账单for (int bill : bills) {if (bill == 5) {  // 如果是 5 美元five_count++;  // 5 美元数量加一}else if (bill == 10) {  // 如果是 10 美元if (five_count >= 1) {  // 如果有 5 美元可以找零five_count--;       // 找零 5 美元ten_count++;        // 得到 10 美元}else {  // 无法找零return false;}}else if (bill == 20) {  // 如果是 20 美元if (ten_count >= 1 && five_count >= 1) {  // 如果有 10 美元和 5 美元可以找零ten_count--;      // 找零 10 美元five_count--;     // 找零 5 美元}else if (five_count >= 3) {  // 如果没有 10 美元,但有 3 张 5 美元可以找零five_count -= 3;  // 找零 3 张 5 美元}else {  // 无法找零return false;}}}return true;  // 能够成功找零
}int main() {vector<int> bills = { 5, 5, 5, 10, 20 };bool result = lemonadeChange(bills);cout << boolalpha << result << endl;  // 输出:truereturn 0;
}

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

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

相关文章

使用gdb调试正在运行的程序

写一个一秒打印一个数的c程序&#xff0c;并编译运行。 #include<unistd.h> #include<stdio.h> int main(int argc,char **argv){int i0;while(1){sleep(1);i;printf("%d\n",i);}return 0; }vim loop.c gcc loop.c -o loop ./loop 查看该进程的进程号。…

《数据库系统概论》学习笔记——王珊 萨师煊

第一章 绪论 一、数据库系统概述 1.数据库的4个基本概念 &#xff08;1&#xff09;数据 描述事物的符号记录称为数据 &#xff08;2&#xff09;数据库 存放数据的仓库 &#xff08;3&#xff09;数据库管理系统 主要功能&#xff1a; &#xff08;1&#xff09;数据定…

APP逆向工具环境安装

环境安装及配置&#xff1a; 1.JDK安装及配置链接&#xff1a;https://pan.baidu.com/s/146I4vDJdz8YeR0OEqLS8xw 提取码&#xff1a;7h00 2.SDK环境配置链接&#xff1a;https://pan.baidu.com/s/1A8rwqyw8Nn7p93Axqpll3A 提取码&#xff1a;cwv43.NDK环境配置链接&#xff1…

【Spark基础】-- 理解 Spark shuffle

目录 前言 1、什么是 Spark shuffle? 2、Spark 的三种 shuffle 实现 3、参考 前言 以前,Spark 有3种不同类型的 shuffle 实现。每种实现方式都有他们自己的优缺点。在我们理解 Spark shuffle 之前,需要先熟悉 Spark 的 execution model 和一些基础概念,如:MapReduce、…

【问题】C++ libcurl实现PUT时阻塞问题

解决方案 将 curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);换成 curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT"); 原因 在项目中对方要求使用PUT来发送控制指令&#xff0c;于是直接使用Libcurl来实现。原本是一个非常简单的事情&#xff0c;确怎么都没发…

SpringBoot:SpringMVC(上)

文章目录 前言一、SpringMVC是什么&#xff1f;1.1 MVC的定义&#xff1a;1.2 MVC 和 Spring MVC 的关系 二、Spring MVC 创建和连接2.1创建springmvc2.2接下来&#xff0c;创建⼀个 UserController 类&#xff0c;实现⽤户到 Spring 程序的互联互通&#xff0c;具体实现代码如…

MYSQL练题笔记-聚合函数-即时食物配送

我做完上一道题&#xff0c;决定总结一下了&#xff0c;因为现在还是没有一个我认为好的思路去构造语句&#xff0c;这里开始试一试新的思路。果然想要好一点的时候&#xff0c;总是像便秘一下&#xff0c;真的想拉&#xff0c;但是真的难拉啊 一、题目相关内容 1&#xff09…

科普关于msvcp140.dll文件是什么内容,解决msvcp140.dll丢失的修复方法

在使用电脑时出现了关于msvcp140.dll丢失的问题&#xff0c;这是什么情况&#xff0c;出现这样的问题通常都会导致电脑中的一些软件不能使用&#xff0c;那么都有什么办法能够解决msvcp140.dll丢失的问题呢&#xff1f;今天就给大家科普一些关于msvcp140.dll文件是什么的内容&a…

小程序长按识别二维码

小程序开发中要实现长按识别二维码的功能很简单&#xff0c;只需要在image标签里添加如下属性即可&#xff1a; 小程序版本&#xff1a; show-menu-by-longpress"{{true}}" uniapp版本&#xff1a; :show-menu-by-longpress"true" 举例&#xff1a; …

小红书种草笔记多少钱?给大家揭秘

小红书&#xff0c;一个以生活方式分享为主题的社交电商平台&#xff0c;吸引了众多年轻用户。种草笔记&#xff0c;是指用户在小红书上分享的关于某一产品或服务的使用体验、心得感悟&#xff0c;通过图文并茂的形式&#xff0c;激发其他用户的好奇心和购买欲望&#xff0c;从…

资深老鸟整理,高级测试工程师应具备的能力...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、业务熟悉 熟悉…

在国内Facebook广告怎么解决充值渠道问题?

怎么解决Facebook预充值跑广告营销的付款方式问题呢&#xff1f; Facebook跑广告是很多做出口营销的公司或团队喜欢的平台之一&#xff0c;那就避免不了需要支付给Facebook平台广告费用了&#xff0c;那到底用什么方式去充值到FB号上去解决呢&#xff1f;FB预充值有什么咔可以…

操作系统·设备管理

I/O系统是计算机系统的重要组成部分&#xff0c;是OS中最复杂且与硬件密切相关的部分 I/O系统的基本任务是完成用户提出的I/O请求&#xff0c;提高I/O速率以及改善I/O设备的利用率&#xff0c;方便高层进程对IO设备的使用 I/O系统包括用于实现信息输入、输出和存储功能的设备和…

stm32L071KB单片机字节对齐问题

字节对齐问题由来很关键 字节对齐问题由来 字节对齐问题由来 在移植同事代码的时候发现到一个赋值变量的地方就会出现死机&#xff0c;进入hardfault,怎么也找不不到原因&#xff0c;最后没办法去了github https://github.com/armink/CmBacktrace/blob/master/README_ZH.md Cm…

Git 还原文件修改

文章目录 前言还原文件修改的三种情况情况一&#xff1a;只是修改了文件&#xff0c;没有进行任何Git操作情况二&#xff1a;修改了文件&#xff0c;并提交到暂存区情况三&#xff1a;修改了文件&#xff0c;并提交到仓库区 前言 在使用Git进行文件修改和提交时&#xff0c;有…

Android : ViewModel+LiveData observe观察数据 改变内容简单应用

observe观察数据 改变内容 1.导包 // 使用androidx版本库implementation androidx.lifecycle:lifecycle-extensions:2.1.0-alpha03// 或者&#xff0c;使用support版本库implementation android.arch.lifecycle:extensions:1.1.1 2.继承ViewModel package com.example.myli…

CommonJs和ES6模块区别,项目中的运用差距

前言 CommonJS 和 ES6 模块是 JavaScript 中两种不同的模块系统。它们有一些区别&#xff0c;尤其在实际应用中的使用上有一些差异。 一、区别 1. 语法差异 CommonJS&#xff1a;使用 require 导入模块&#xff0c;使用 module.exports 或 exports 导出模块。 ES6 模块&…

openGauss学习笔记-141 openGauss 数据库运维-例行维护-例行重建索引

文章目录 openGauss学习笔记-141 openGauss 数据库运维-例行维护-例行重建索引141.1 背景信息141.2 重建索引141.3 操作步骤 openGauss学习笔记-141 openGauss 数据库运维-例行维护-例行重建索引 141.1 背景信息 数据库经过多次删除操作后&#xff0c;索引页面上的索引键将被…

一次北斗接收机调试总结

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 最近项目中要用到北斗接收机&#xff0c;它的样子是长这样的&#xff1a; 这部机器里面是没有操作系统的&#xff0c;由单片机控制。最近我们要根据协议…

ChatGPT发布一年后,搜索引擎的日子还好吗?

导读&#xff1a;生成式AI&#xff0c;搜索引擎的终结者还是进化加速器 ChatGPT发布刚刚一年&#xff0c;互联网世界已经换了人间。 2023年&#xff0c;以ChatGPT和大模型为代表的生成式AI浪潮对全球互联网、云计算、人工智能领域都带来巨大冲击。而且生成式AI在各行各业的应用…