Leetcode-135-Candy
2019-05-17 本文已影响0人
单调不减

这个题我之前好像在某公司的笔试题里见过,其实思路并不是很复杂,遍历一遍ratings,并不断记录连续上升的steps数和连续下降的steps数即可,当然还需要记录下降前峰值的高度,当下降到零的时候将从峰值到当前位置的糖果数加一。
代码如下:
class Solution
{
public:
int candy(vector<int>& ratings)
{
int upStep=0,downStep=0,peak=1,ans=1;
for(int i=1;i<ratings.size();i++)
{
if(ratings[i-1]<ratings[i])
{
upStep++;
downStep=0;
peak=upStep+1;
ans+=peak;
}
else if(ratings[i-1]==ratings[i])
{
upStep=downStep=0;
peak=1;
ans+=peak;
}
else
{
upStep=0;
downStep++;
ans+=(peak-downStep>0)?downStep:downStep+1;
}
}
return ans;
}
};
