作者:Geekwyz
leetcode之分发糖果问题
- 解题思路
贪心问题:
先确保每个小朋友有一个糖果
1.分别循环两次
2.第一次循环解决右边孩子评分大于左边孩子的问题,然后让评分高的加1
3.第二次循环解决左边孩子评分小于右边孩子的问题,然后取两个中最大值max(nums[j - 1],nums[j] + 1);
4.求和
class Solution {
public:
int candy(vector<int>& ratings) {
int len = ratings.size();
if (len < 2) return len;
vector<int>nums(len,1);
for (int i = 1;i < len;i++) {
if (ratings[i - 1] < ratings[i]) {
nums[i] = nums[i - 1] + 1;
}
}
for (int j = len - 1;j > 0;j--) {
if (ratings[j] < ratings[j - 1]) {
nums[j - 1] = max(nums[j - 1],nums[j] + 1);
}
}
return accumulate(nums.begin(),nums.end(),0);
}
};