一群孩子站成一排,每一个孩子有自己的评分。现在需要给这些孩子发糖果,规则是如果一
个孩子的评分比自己身旁的一个孩子要高,那么这个孩子就必须得到比身旁孩子更多的糖果;所
有孩子至少要有一个糖果。求解最少需要多少个糖果。
class Solution {
public:
int candy(vector<int>& ratings) {
int n=ratings.size();
int candy[n];
for(int i=0;i<n;i++)candy[i]=1;
for(int i=0;i<n-1;i++)
if(ratings[i]<ratings[i+1])candy[i+1]=candy[i]+1;
for(int i=n-1;i>=1;i--)
if(ratings[i]<ratings[i-1]&&candy[i-1]<=candy[i])candy[i-1]=candy[i]+1;
int sum=0;
for(int i=0;i<n;i++)sum+=candy[i];
return sum;
}
};
贪心算法,两次遍历,分别从左到右,从右到左对条件进行判定并反应