老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。
你需要按照以下要求,帮助老师给这些孩子分发糖果:

每个孩子至少分配到 1 个糖果。
评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。

那么这样下来,老师至少需要准备多少颗糖果呢?

示例 1:
输入:[1,0,2]
输出:5
解释:你可以分别给这三个孩子分发 2、1、2 颗糖果。

示例 2:
输入:[1,2,2]
输出:4
解释:你可以分别给这三个孩子分发 1、2、1 颗糖果。
第三个孩子只得到 1 颗糖果,这已满足上述两个条件。

————————————————————————————————————————————————————
这道题看起来思路很简单,但是在这里需要注意一点,就是一定是要确定一边之后,再确定另一边,例如比较每一个孩子的左边,然后再比较右边,如果同时进行就会出错;

右边评分大于左边的情况
局部最优:只要右边评分比左边大,右边的孩子就多一个糖果,
全局最优:相邻的孩子中,评分高的右孩子获得比左边孩子更多的糖果

左边评分大于右边的情况
这里先注意一点,就是要从后往前遍历,如果从前向后遍历,根据 ratings[i + 1] 来确定 ratings[i] 对应的糖果,那么每次都不能利用上前一次的比较结果了。
局部最优:取candyVec[i + 1] + 1 和 candyVec[i] 最大的糖果数量。
全局最优:相邻的孩子中,评分高的孩子获得更多的糖果。

代码如下:

class Solution {public:int candy(vector<int>& ratings) {//candyVec存放每一个孩子的得到的糖果数,初始默认每个孩子的糖果数为1;vector<int> candyVec(ratings.size(), 1);//右边评分大于左边的情况for (int i = 1; i < ratings.size(); ++i) {if (ratings[i] > ratings[i - 1])candyVec[i] = candyVec[i - 1] + 1;}//左边评分大于右边的情况for (int i = ratings.size() - 2; i >= 0; --i) {if (ratings[i] > ratings[i + 1]) candyVec[i] = max(candyVec[i + 1] + 1, candyVec[i]);}//计算总和int total = 0;for (int i : candyVec) total += i;return total;}
};

135. 分发糖果(贪心算法)相关推荐

  1. LeetCode 135. 分发糖果(贪心算法)

    题目描述 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分. 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果. 相邻的孩 ...

  2. 170. Leetcode 135. 分发糖果 (贪心算法-两个维度权衡题目)

    这道题目一定是要确定一边之后,再确定另一边,例如比较每一个孩子的左边,然后再比较右 边,如果两边一起考虑一定会顾此失彼. 先确定右边评分大于左边的情况(也就是从前向后遍历) 此时局部最优:只要右边评分 ...

  3. 通俗易懂:贪心算法(一):分配问题 (力扣455分发饼干 和135分发糖果)

    看完本文,可以顺便解决leetcode以下两个题目: 455.分发饼干(简单) 135.分发糖果(困难) 一.通俗易懂的 贪心算法 |思想 贪心算法就是采用贪心的策略,保证每一次的操作都是局部最优的, ...

  4. 贪心 135. 分发糖果

    135. 分发糖果 难度困难1086 n 个孩子站成一排.给你一个整数数组 ratings 表示每个孩子的评分. 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果. 相邻两个孩 ...

  5. 135. 分发糖果 【每日一题】

    135. 分发糖果 思路 两次遍历,先从左到右计算出每个人的糖果数,这一步就是后一个比前一个大就在前一个基础上+1,不然置为1,从这个思路来来看,我们这一趟酒吧升序的给基本算好了,但是降序的我们现在全 ...

  6. 135. 分发糖果002(贪心算法+思路+详解)

    一:题目 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分. 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果. 评分更高 ...

  7. 135. 分发糖果(困难)-贪心

    一.题目描述 n 个孩子站成一排.给你一个整数数组 ratings 表示每个孩子的评分. 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果. 相邻两个孩子评分更高的孩子会获得更 ...

  8. LeetCode 135 分发糖果

    题目描述 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先 给他们评分.你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果. 相邻的孩子 ...

  9. leetcode 135. 分发糖果

    老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分. 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果. 相邻的孩子中,评分 ...

最新文章

  1. Spring Cloud构建微服务架构:消息驱动的微服务(消费组)【Dalston版】
  2. mysql savepoint是什么_Mysql中的隐式COMMIT以及Savepoints的作用
  3. Ubuntu-Python2.7安装 scipy,numpy,matplotlib
  4. 计算机博士两篇一区两篇会议,本科博士联手!西电陈渤团队两篇论文被顶级会议录用...
  5. 文本框获取和失去焦点默认值问题
  6. 手机发送验证码的业务逻辑探究-主要是安全性,响应性
  7. 体重测试java算法代码_标准体重计算示例代码
  8. halcon学习之基于灰度的特征提取
  9. 读凤凰网经典语句记录一
  10. 拓客系统专用服务器,北京拓客系统
  11. 网络异步编程(C#)团购课
  12. 英语四级高频词汇电子版_英语四级使用频率最高的580个词汇
  13. 啊哈C语言 第七章 【代码】【习题答案】
  14. winrar加密分析
  15. 系统架构设计师:软件开发基础知识
  16. 如何使用Hyper-V Manager和Powershell合并Hyper-V检查点
  17. 基于BCNN的汽车车型识别研究
  18. [CF1436A] Reorder
  19. java代码耗尽内存_windows server 2008 环境下,运行java程序,内存耗尽问题
  20. 如何去掉a标签的下划线 各种样式详解

热门文章

  1. php执行只读文件,php实现以只读方式打开文件的方法
  2. mdx词典包_推荐几款实用的英语词典
  3. 英语作文 计算机新技术对生活的影响,急求一篇电脑对于未来生活影响的英语作文,50分 200词左右...
  4. 数据中心液冷技术发展分析
  5. 2022,普平数据中心招聘来啦!
  6. 怎么回事?在测量时仪器数值不稳
  7. 数据中心业务价值永续的密码——施耐德电气全生命周期服务
  8. 未来的数据中心(一)
  9. 数据中心运维里的那些不成文的规定
  10. 成功解决ERROR: Failed building wheel for pycocotools