LeetCode 135 Candy(贪心算法)
135. Candy
There are N children standing in a line. Each child is assigned a rating value.
You are giving candies to these children subjected to the following requirements:
- Each child must have at least one candy.
- Children with a higher rating get more candies than their neighbors.
What is the minimum candies you must give?
要求使用最少的糖分给不同孩子,要注意只是有更高分数的拿更多的糖,相同分数可以给不同数量的糖。
考虑对第 i 个孩子,如果他的分数等于之前的孩子,那给他一颗糖就能满足条件。如果他的分数大于之前的孩子,给他前一个孩子的糖+1。如果小于,考虑给一颗糖,如果上一个孩子有不止一颗糖,可以满足条件,但是如果上一个孩子只有一颗糖,对上一个孩子来说,他有比右边孩子更高的分数,但是只有相同的糖的数目。所以这种情况需要重新考虑。
一个方法是对 i 之前的孩子遍历,依次增多糖的数目直到满足条件,但是这样复杂度达到O(n^2),后面的case会超时。所以只能改变思路,一旦发现这样的 i ,我们从 i 开始找到分数最长连续递减的序列。比如 [1,4,3,2,1] 里,遍历到 2 时,糖果分配情况是
1,2,1 我们从 2 开始 找到递减序列 2,1 然后从 1 开始倒着对少分糖的孩子发糖,得到正确的分糖情况 [1,4,3,2,1] 。最后考虑一下边界即可。
python AC代码:
class Solution(object):
def candy(self, ratings):
can = [1 for _ in ratings]
i = 1
while i<len(ratings):
if ratings[i]==ratings[i-1]:
i+=1
elif ratings[i]>ratings[i-1]:
can[i]=can[i-1]+1
i+=1
else:
if can[i-1]==1:
while i+1<len(ratings) and ratings[i+1]<ratings[i]:
i+=1
j = i
while j-1>=0 and ratings[j-1]>ratings[j] and can[j-1]<=can[j]:
can[j-1]=1+can[j]
j-=1
if j>0 and ratings[j-1]<ratings[j] and can[j-1]>=can[j]:
can[j] = can[j-1]+1
else:
i+=1
return sum(can)
LeetCode 135 Candy(贪心算法)的更多相关文章
- LeetCode解题记录(贪心算法)(二)
1. 前言 由于后面还有很多题型要写,贪心算法目前可能就到此为止了,上一篇博客的地址为 LeetCode解题记录(贪心算法)(一) 下面正式开始我们的刷题之旅 2. 贪心 763. 划分字母区间(中等 ...
- C#LeetCode刷题-贪心算法
贪心算法篇 # 题名 刷题 通过率 难度 44 通配符匹配 17.8% 困难 45 跳跃游戏 II 25.5% 困难 55 跳跃游戏 30.6% 中等 122 买卖股票的最佳时机 II C ...
- LeetCode解题记录(贪心算法)(一)
1. 前言 目前得到一本不错的算法书籍,页数不多,挺符合我的需要,于是正好借这个机会来好好的系统的刷一下算法题,一来呢,是可以给部分同学提供解题思路,和一些自己的思考,二来呢,我也可以在需要复习的时候 ...
- (LeetCode 135) Candy N个孩子站成一排,给每个人设定一个权重
原文:http://www.cnblogs.com/AndyJee/p/4483043.html There are N children standing in a line. Each child ...
- leetcode 135. Candy ----- java
There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...
- Leetcode#135 Candy
原题地址 遍历所有小孩的分数 1. 若小孩的分数递增,分给小孩的糖果依次+12. 若小孩的分数递减,分给小孩的糖果依次-13. 若小孩的分数相等,分给小孩的糖果设为1 当递减序列结束时,如果少分了糖果 ...
- Java for LeetCode 135 Candy
There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...
- [leetcode] 135. Candy (hard)
原题 前后两遍遍历 class Solution { public: int candy(vector<int> &ratings) { vector<int> res ...
- LEETCODE —— Best Time to Buy and Sell Stock II [贪心算法]
Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a ...
随机推荐
- 有关默认相机转VR相机
呃...15年开篇~ 去年想写一个有关默认相机转VR相机的脚本,当时没写完,今天不小心翻到并写完了,而且思路也和原来完全不一样了,增加了是否删除原相机与是否转换所选相机的选项. 由于国内VR版本比较混 ...
- Http协议:彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
转载:http://mp.weixin.qq.com/s/uWPls0qrqJKHkHfNLmaenQ 导语 Http 缓存机制作为 web 性能优化的重要手段,对从事 Web 开发的小伙伴们来说是必 ...
- Web前端MVC框架
MVC: 模型层(model).视图层(view).控制层(controller) Model:即数据模型,用来包装和应用程序的业务逻辑相关的数据或者对数据进行处理,模型可以直接访问数据. View: ...
- Nginx泛解析的匹配域名绑定到子目录配置
网站的目录结构为: # tree /home/wwwroot/linuxeye.com /home/wwwroot/linuxeye.com ├── bbs │ └── index.html └─ ...
- xcode8让真机测试支持ios8.0以下版本
xcode8支持ios8以下真机测试方法: 1.应用程序-xcode 显示包内容-Contents-Developer-Platforms-iPhoneOS.platform-DeviceSuppor ...
- java获取图片原始尺寸
java获取图片原始尺寸 URL url = null; InputStream is = null; BufferedImage img = null; try { url = new URL(pi ...
- python学习笔记——1
python1.python处理单/双引号==>处理字符串中包含单引号==>"I'm kunkun"==>处理字符串中包含双引号==>'I am " ...
- 重载Python FTP_TLS 实现Implicit FTP Over TLS方式下载文件
对于Python2.7来说,内置的FTP_TLS类并不支持Implicit FTP Over TLS加密方式的FTP Server操作,为支持Implicit FTP Over TLS加密方式,必须重 ...
- OAF_开发系列04_实现OAF查询4种不同的实现方式的比较和实现(案例)
2014-06-02 Created By BaoXinjian
- HDU 1394 Minimum Inversion Number(最小逆序数 线段树)
Minimum Inversion Number [题目链接]Minimum Inversion Number [题目类型]最小逆序数 线段树 &题意: 求一个数列经过n次变换得到的数列其中的 ...