问题描述
有N个小朋友站在一排,每个小朋友都有一个评分
你现在要按以下的规则给孩子们分糖果:
每个小朋友至少要分得一颗糖果
分数高的小朋友要他比旁边得分低的小朋友分得的糖果多
你最少要分发多少颗糖果?
解法
快捷方法:从左到右遍历一遍,保证右边比左边大的对应candy也多
再从右到左遍历一遍,保证左边比右边大但是candy却没有右边多的重新分配糖果
class Solution {
public:
int candy(vector<int> &ratings) {
int len = ratings.size();
vector<int> candy(len,1);
for(int i=1;i<len;i++){
if(ratings[i]>ratings[i-1])candy[i]=candy[i-1]+1;
}
for(int i=len-1;i>0;i--){
if(ratings[i-1]>ratings[i] && candy[i-1]<=candy[i])candy[i-1]=candy[i]+1;
}
int sums = 0;
for(int i=0;i<len;i++){
sums+=candy[i];
}
return sums;
}
};