贪心题目。
步骤如下:
1.初始化candy数组,至少每个孩子1个糖果全部初始化为1。
2.从左往右,如果ratings[i]大于ratings[i-1],那么ratings大的人得到的糖果要比ratings小的人得到的糖果+1。i从1开始是因为有i-1
3.从右往左遍历,同理,同时取从左往右值的一个最大值,i从ratings.size() -2 开始遍历是因为有i+1。
4.for循环收集结果
class Solution {
public:
int candy(vector<int>& ratings) {
vector<int> candy_n(ratings.size(),1);
for(int i = 1;i<ratings.size();i++){
if(ratings[i] > ratings[i-1]){
candy_n[i] = candy_n[i-1]+1;
}
}
for(int i= ratings.size() -2 ; i >= 0; i--){
if(ratings[i] > ratings[i+1]){
candy_n[i] = max(candy_n[i],candy_n[i+1]+1);
}
}
int res = 0;
for(int i=0;i<ratings.size();i++){
res += candy_n[i];
}
return res;
}
};