N个孩子分糖果,每个孩子至少一颗糖果,相邻分高的孩子获得更多糖果。
时间N,空间1
往前遍历,递增的话每次比上一次多加一,递减的话加上当前递减序列长度。若递减序列长度超过上一个递增序列,则多加一个。
class Solution {
public:
int candy(vector<int>& ratings) {
int ans = ratings.size();
int pre = 0;
bool add = true;
int addcount = 1;
int cutcount = 1;
for(int i=1;i<ratings.size();i++){
if(ratings[i]>ratings[i-1]){
ans+=++pre;
if(add){
addcount++;
}
else{
addcount = 2;
add = true;
}
}
else if(ratings[i]<ratings[i-1]){
if(add){
cutcount = 1;
pre = 0;
add =false;
}
else{
ans+=cutcount;
cutcount++;
}
if(cutcount>=addcount)
ans++;
}
else{
pre = 0;
addcount=1;
cutcount=1;
add = true;
}
}
return ans;
}
};