分糖果:本来只想分别分析每个孩子与相邻孩子之间的评分关系,遍历一次就求出结果,尝试了一下,放弃了,还是分成两步实现:
1.从前往后遍历,若当前孩子评分大于前一个,则糖果数应比前一个多1——保证每个评分比前一个高的孩子分到的糖果数也多
2.从后往前遍历,若当前孩子评分大于后一个,且后一个孩子的糖果数大于等于当前的孩子,则当前孩子的糖果数应+1——保证每个评分比后一个高的孩子分到的糖果数也多
class Solution {
public:
int candy(vector<int>& ratings) {
int i,n=ratings.size(),ans=0;
vector<int> candies(n,1);
for(i=1;i<n;i++)
candies[i]=ratings[i]>ratings[i-1]?candies[i-1]+1:1;
for(i=n-2;i>=0;i--)
{
candies[i]=(ratings[i]>ratings[i+1] && candies[i+1]>=candies[i])?candies[i+1]+1:candies[i];
ans+=candies[i];
}
ans+=candies[n-1];
return ans;
}
};