leetCode #135 Candy
2015-09-01 15:03
405 查看
题目:给一排小孩发糖果,每个小孩有自己的评分,评分高的小孩得到的糖果比评分低的左右邻居要多。每个小孩至少一个糖果。问最少发多少糖果?
分析:
对于一个顺序上升或者下降的评分序列,小孩得到的糖果最少也得是递增/递减的
比如
评分 1 3 5 7 8
糖果 1 2 3 4 5
评分 9 7 4 3 1
糖果 5 4 3 2 1
而对于非递增/递减的评分序列,可以拆分成几段上升/下降的序列
另外可以考虑,从左到右扫描评分数组,使之满足最少的递增情况的糖果分发
然后从右到左扫描,使之满足最少的递减情况的糖果分发。
答案:
分析:
对于一个顺序上升或者下降的评分序列,小孩得到的糖果最少也得是递增/递减的
比如
评分 1 3 5 7 8
糖果 1 2 3 4 5
评分 9 7 4 3 1
糖果 5 4 3 2 1
而对于非递增/递减的评分序列,可以拆分成几段上升/下降的序列
另外可以考虑,从左到右扫描评分数组,使之满足最少的递增情况的糖果分发
然后从右到左扫描,使之满足最少的递减情况的糖果分发。
答案:
class Solution { public: int candy(vector<int>& ratings) { vector<int> candies; candies.push_back(1); for (int i = 1; i< ratings.size(); i++){ if (ratings[i-1] < ratings[i]) candies.push_back(candies[i-1] +1);// i should has more than i-1 else candies.push_back(1); } for (int i = ratings.size() - 2; i>=0; i--){ if (ratings[i] > ratings[i+1] && candies[i] <= candies[i+1]) candies[i] = (candies[i+1] +1);// i should has more than i+1 } int sum = 0; for (int i = 0; i< candies.size(); i++){ sum +=candies[i]; } return sum; } };
相关文章推荐
- Windows支持的4种类型的同步对象:临界区、互斥量、事件和信号量
- 代理模式(二):代理模式应用实例(收费商务信息查询系统)
- 线段覆盖长度
- Linux的信号 SIGALRM和SIGINT的使用示例
- 代码质量
- spring 学习笔记1
- MySQL 一些让人容易忽视的知识点
- css inline与block
- 声明结构体类型
- Unity3D架构系列之- FSM有限状态机设计四
- iis访问数据的问题
- 表单的常用提交方式:get与post
- hdu2896病毒侵袭(ac自动机,求模式串出现的个数)
- 在Ubuntu平台中读取CSV文件并用table进行展示
- Linux下使用MySQL"load data infile"出错的问题
- MFC之列表视图控件List Control
- python中时间格式
- js运算符
- Centos6部署nginx(一)
- CUDA tutorial 1