Leetcode225: Candy
2016-01-08 20:56
453 查看
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?
题目大概意思就是给你一些孩子的rating,这些孩子站成一个直线,相邻的孩子rating高的一定要比rating低的孩子的candy多
所有孩子至少有一个candy。
问最少发多少个candy
最少呢,我们当然就是保证再满足限制条件下尽量少发candy给孩子。
那限制条件当然来自相邻的孩子。
如果我比你高,我就比你多1,最低的孩子为1.
从左往右扫瞄一次,波谷为1,然后依次加1到波峰,再到波谷时又是1
这样就满足所有rating高的比左边rating低的孩子的candy多了。
然后再从右往左来一次,一样的,不弱还要多个条件就是,因为刚才算了一次candy[i]了
这次candy[i]要取最大的才能同同时满足这两个条件。
然后就ok啦,两边都满足了!
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?
题目大概意思就是给你一些孩子的rating,这些孩子站成一个直线,相邻的孩子rating高的一定要比rating低的孩子的candy多
所有孩子至少有一个candy。
问最少发多少个candy
最少呢,我们当然就是保证再满足限制条件下尽量少发candy给孩子。
那限制条件当然来自相邻的孩子。
如果我比你高,我就比你多1,最低的孩子为1.
从左往右扫瞄一次,波谷为1,然后依次加1到波峰,再到波谷时又是1
这样就满足所有rating高的比左边rating低的孩子的candy多了。
然后再从右往左来一次,一样的,不弱还要多个条件就是,因为刚才算了一次candy[i]了
这次candy[i]要取最大的才能同同时满足这两个条件。
然后就ok啦,两边都满足了!
class Solution { public: int candy(vector<int>& ratings) { int n = ratings.size(); int *p = new int ; memset(p, 0, sizeof(int)*n); int k = 1; for(int i = 1; i < n; i++) { if(ratings[i] > ratings[i-1]) p[i] = max(k++, p[i]); else k = 1; } for(int i = n-2; i >= 0; i--) { if(ratings[i] > ratings[i+1]) p[i] = max(k++, p[i]); else k = 1; } int res = n; for(int i = 0; i < n; i++) res += p[i]; return res; } };
相关文章推荐
- BZOJ 4393: [Usaco2015]Fruit Feast|离散化|暴力
- 求21位数的水仙花数
- 9patch
- Codeforces Contest #338 Div.2
- 给Layer添加触摸事件
- activity之间传递对象的两种方式
- 《Java虚拟机原理图解》4.JVM机器指令集
- Affinity Photo 图层面板消失的解决办法
- 放麦子
- 【Linux学习】epoll详解
- 机器学习书籍
- extern "c"用法解析
- 父窗体包含两个子窗体
- Egret3D 研究报告(一)初试
- 第一个数字(数字的值返回)
- 架构设计的UML图形思考
- POJ 3580 SuperMemo Splay/可持久化Treap 维护区间
- POJ 3630 Phone List Trie题解
- python学习之html从0开始(二)
- 扑克牌排列