问题描述:有一群小孩,每个人都要有一个编号,编号大的孩子要比旁边孩子的得到的棒棒糖多,且每个孩子至少有一个棒棒糖,用最少的棒棒糖分发。
力扣135题:题目链接
分析:从左向右遍历一遍,大的加一,在从右向左遍历,大的加一或者不变(可能之前就加过)。
class Solution {
public:
int candy(vector<int>& ratings) {
int size=ratings.size();
vector<int> mm(size,1);
if(size<2)
return size;
for(int i=0;i<size-1;i++)
{
if(ratings[i]<ratings[i+1])
mm[i+1]=mm[i]+1;
}
for(int j=size-1;j>0;j--){
if(ratings[j]<ratings[j-1])
mm[j-1]=max(mm[j]+1,mm[j-1]);
}
int sum=0;
for(int i=0;i<size;i++){
sum+=mm[i];
}
return sum;
}
};