n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:
每个孩子至少分配到 1 个糖果。
相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
添加链接描述
两次遍历,不要同时考虑左孩子和右孩子,每次遍历只考虑一边,并且两次遍历方向要相反,要利用上一次的。
class Solution {
public:
int candy(vector<int>& ratings) {
vector<int>a(ratings.size(),1);
for(int i=0;i<ratings.size()-1;i++)
if(ratings[i]<ratings[i+1])
a[i+1]=a[i]+1;
for(int i=ratings.size()-1;i>=1;i--)
if(ratings[i]<ratings[i-1])
a[i-1]=max(a[i-1],a[i]+1);
int sum=0;
for(int i=0;i<ratings.size();i++)
sum+=a[i];
return sum;
}
};