您的位置:首页 > 其它

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啦,两边都满足了!
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: