1 双向贪心算法
贪心策略:
- 从左到右遍历,只比较右孩子评分比左边大的情况
- 从右到左遍历,只比较左孩子评分比右边大的情况
class Solution {
public:
int candy(vector<int>& ratings) {
int size = ratings.size();
vector<int> num(size, 1);
// 1.前向贪心
for (int i = 1; i < size; i++)
if (ratings[i] > ratings[i-1])
num[i] = num[i-1] + 1;
// 2.后向贪心
for (int i = size - 2; i >= 0; i--)
if (ratings[i] > ratings[i+1])
// 第i个孩子也许比第i+1孩子拿到的糖果本来就多, 故用max
num[i] = max(num[i], num[i+1] + 1);
return accumulate(num.begin(), num.end(), 0);
}
};
致谢
图片源于「代码随想录」公众号,欢迎大家关注大佬公号