Leetcode|困难|两维度贪心|135. 分发糖果(前向贪心+后向贪心)

在这里插入图片描述

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);
    }
};

在这里插入图片描述

致谢

图片源于「代码随想录」公众号,欢迎大家关注大佬公号

猜你喜欢

转载自blog.csdn.net/SL_World/article/details/114908032
今日推荐