您的位置:首页 > 其它

LeetCode Candy Greedy

2015-09-01 20:49 316 查看
思路:贪心。

Each child must have at least one candy.

刚开始,每个孩子都得一个candy。

Children with a higher rating get more candies than their neighbors.

从左往右扫描一遍,处理 右孩子比左孩子等级高 的情况;

再从右往左扫描一遍,处理 左孩子比右孩子等级高 且 左孩子比右孩子candy数少 的情况;

class Solution {
public:
    int candy(vector<int>& ratings) {
        int len = ratings.size();
        if(len == 0) {
            return 0;
        }
        if(len == 1) {
            return 1;
        }
        int min_sum = 0;
        vector<int> res(len, 1);
        //from left to right
        for(int i = 0; i <= len - 2; ++i) {
            if(ratings[i + 1] > ratings[i]) {
                res[i + 1] = res[i] + 1;
            }
        }
        //from right to left
        for(int i = len - 1; i >= 1; --i) {
            if(ratings[i - 1] > ratings[i] && res[i - 1] <= res[i]) {
                res[i - 1] = res[i] + 1;
            }
        }
        //sum
        for(int i = 0; i < len; ++i) {
            min_sum += res[i];
        }
        return min_sum;
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: