您的位置:首页 > 其它

LeetCode 135. Candy

2017-10-10 17:07 330 查看
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?
/*
题意:
N个孩子站成一排,给每个人设定一个权重。按照如下的规则分配糖果:
(1)每个孩子至少分得一颗糖果
(2)权重较高的孩子,会比他的邻居获得更多的糖果
问一共最少需要多少颗糖果?*/
/*
思路:
设每个孩子分到的糖果数组为res
,初始值为1,因为每个人至少分到一颗糖
1、与前面的邻居比较,如果ratings[i]>ratings[i-1],则res[i]=res[i-1]+1,
然后向后遍历数组ratings
2、与后面的邻居比较,如果ratings[i]>ratings[i+1]且res[i]-res[i+1]<1,
则res[i]=res[i+1]+1,然后向前遍历数组ratings
3、对res求和即为最少需要的糖果
*/
class Solution {
public:
int candy(vector<int>& ratings) {
int sum = 0;
vector<int>res(ratings.size(), 1);
for(int i = 1; i < ratings.size(); i++){
if(ratings[i] > ratings[i-1])
res[i] = res[i-1] + 1;
}
for(int i = ratings.size()-2; i >= 0; i--){
if(ratings[i] > ratings[i+1] && res[i] - res[i+1] < 1)
res[i] = res[i+1] + 1;
}
for(int i = 0; i < res.size(); i++)
sum+= res[i];
return sum;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: