【力扣刷题 | 第十九天】

目录

前言:

135. 分发糖果 - 力扣(LeetCode)

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

 总结:


前言:

        今天着重刷贪心算法的题目 

135. 分发糖果 - 力扣(LeetCode)

n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。

你需要按照以下要求,给这些孩子分发糖果:

每个孩子至少分配到 1 个糖果。
相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。

 这道题的难点在于如何确定当前孩子所得的糖果值一定始终比两边孩子所得到的糖果多,很多人会想到对每一个孩子的左右同时进行比较,写成了这种(也有的只是把):

      for(int i=0;i<ratings.size()-1;i++){if(ratings[i]<ratings[i+1]){nums[i+1]=1+nums[i];}else if(ratings[i]>ratings[i+1] ){nums[i]=nums[i+1]+1;}}

但实际上这种做法是有漏洞的,因为实际上在比较的时候,每一个孩子手里的糖果数量都会发生变化,而相应的如果要多的话,也就要进行动态调整,如果按照上面的写法,就容易出现这种,也就是3一开始比2大,因此3拿两颗糖果

初始:

 

最终:

 

解释:最开始都是1,3比2大,因此3的糖果加一变为2,再向后2比1大,加一,因此2的糖果书加一变为2,我们发现忽略了两个都加之后,3明明比2大,但是我们因为是一直向后遍历,并没有考虑到实时变化,因此才会出现这种情况

因此不能使用这种,很多人又会想到把这两个if语句分开,但实质上动态调整不是拆分if的问题,而是遍历顺序的问题,在比较左右孩子的时候,我们在比较完一侧孩子之后,在比较另一次的时候,应该从后往前遍历,这样才可以实时掌握变化。

因此这道题最好的方法就是拆开比较,我们先保证每一个孩子一定比他左边的孩子拿到的糖果多,再保证每一个孩子一定比他右边的孩子拿到的糖果多,这个来进行解题

其实这道题的核心并不在于怎么分糖果,因为这很好想清楚:我们如果想尽可能少的分糖果,就只多一颗

class Solution {
public:int candy(vector<int>& ratings) {vector<int> nums(ratings.size(),1);// 一定比左边的孩子拿到的多for(int i=1;i<ratings.size();i++){if(ratings[i]>ratings[i-1] ){nums[i]=1+nums[i-1];}}// 一定比右边的孩子拿到的多for (int i = ratings.size() - 2; i >= 0; i--) {if (ratings[i] > ratings[i + 1] ){nums[i] = max(nums[i], nums[i + 1] + 1);}}int sum = 0;for(int i=0;i<nums.size();i++){sum = sum + nums[i];}return sum;}
};

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

在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。

每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。

注意,一开始你手头没有任何零钱。

给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。

思路很清晰的一道题,时刻记录当前手里的5 和 10钞票面额就可以了,每一次找零前进行判断是否够找零,不用纪录20的张数,因为这个题最大找零是15。唯一贪心 的地方是:因为 5 元既可以找10元,也可以找20,因此在找20的时候,我们优先消耗10,这样才可以尽可能多的找零。

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

 总结:

        两道题都是贪心算法题目,尤其是柠檬水题目,我一开始还想着用数组来存储当前拥有的零钱,大大增加了题的复杂程度,其实可以直接用变量来记录的,下次做题前一定要思维足够开阔! 

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

 

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

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

相关文章

SQL语法与数据库快速入门(1)

目录 数据库简介数据库分类常用数据库简介使用场景MySql 的安装与配置数据库客户端工具MySql 介绍SQL 简介DDL 数据库操作-创建DDL 数据库操作-查看DDL 数据库操作-修改DDL 数据库操作-删除DDL 数据库表操作简介DDL 数据库表操作-创建DDL 数据库表操作-查看DDL 数据库表操作-修…

explain 是干嘛的

explain 是干嘛的 1.explain的作用 在MySQL中&#xff0c;EXPLAIN是一个用于查询优化的关键字。它可以用于分析查询语句的执行计划&#xff0c;帮助开发人员和数据库管理员理解查询的执行方式、查询涉及的表和索引、连接类型、查询优化器的决策等信息。 通过使用EXPLAIN关键…

【基于FPGA的芯片设计】RISC-V的20条指令CPU设计

实验板卡&#xff1a;xc7a100tlc sg324-2L&#xff0c;共20个开关 实验要求&#xff1a;

psutil库使用详解

一、背景 在Python的世界里&#xff0c;有一些库因其强大的功能和易用性而备受开发者们的喜爱。今天&#xff0c;我们要介绍的就是其中的一员——psutil库。psutil(python system and process utilities)是一个跨平台的第三方库&#xff0c;用于获取系统运行时的进程和系统利用…

【数据结构】搜索二叉树/map/set

二叉搜索树&#xff08;搜索二叉树&#xff09; 1.1.二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则…

决策树(Decision Tree)

文章目录 一、决策树 一、决策树 决策树在机器学习中也是比较常见的一种算法&#xff0c;属于监督学习中的一种。看字面意思应该也比较容易理解&#xff0c;相比其他算法比如支持向量机(SVM)或神经网络&#xff0c;似乎决策树感觉“亲切”许多。 优点&#xff1a;计算复杂度不…

Web3与物联网行业:实现安全、可信与智能的连接

随着物联网技术的快速发展&#xff0c;我们正迎来一个高度互联、智能化的未来。而Web3作为互联网的下一次演进&#xff0c;将为物联网行业带来重要的变革。 本文将探讨Web3在物联网行业中的应用前景和优势&#xff0c;以及如何实现安全、可信和智能的连接。 第一部分&#xff…

QT Quick初学笔记---第一篇

链接: QML Book中文版(QML Book In Chinese) 1、对Qt Quick的初步认识 Qt Quick是Qt5界面开发技术的统称&#xff0c;是以下几种技术的集合&#xff1a; QML&#xff1a;界面标记语言JavaScript&#xff1a;动态脚本语言QT C&#xff1a;跨平台C封装库 QML是与HTML类似的一…

OpenCV 入门教程:中值滤波和双边滤波

OpenCV 入门教程&#xff1a;中值滤波和双边滤波 导语一、中值滤波二、双边滤波三、示例应用3.1 图像去噪3.2 图像平滑 总结 导语 在图像处理和计算机视觉领域&#xff0c;中值滤波和双边滤波是两种常见的滤波方法&#xff0c;用于平滑图像、去除噪声等。 OpenCV 提供了中值滤…

抖音seo矩阵系统源码|需求文档编译说明(技术)

1.抖音seo矩阵系统文档开发流程 抖音SEO矩阵指的是一系列通过搜索引擎优化&#xff08;SEO&#xff09;技术和策略来提升抖音账号在搜索结果中排名的方法和工具。在抖音上&#xff0c;用户可以通过搜索关键词来查找与其相关的视频和账号。因此&#xff0c;抖音SEO矩阵的主要目…

大模型与端到端会成为城市自动驾驶新范式吗?

摘要&#xff1a; 最近可以明显看到或者感受到第一梯队的城市自动驾驶量产已经进入快车道&#xff0c;他们背后所依靠的正是当下最热的大模型和端到端的技术。 近期&#xff0c;城市自动驾驶量产在产品和技术上都出现了新的变化。 在产品层面&#xff0c;出现了记性行车或者称…

macOS 开发 - 纯代码生成 Window

文章目录 1、创建项目删除项目自带 window创建 BaseWindowController 继承自 NSWindowController子 WC 继承 BaseWC个人更喜欢纯代码:控制力、方便复制,不用卡卡的打开 xib 这里不使用各种项目自带的 storyboard/xib,使用纯代码创建 window(controller) 本示例代码将创建如下…