LeetCode 101 刷题 - (1) 第一章 最易懂的贪心算法

2025/8/24


LeetCode 455 分发糖果

复制代码
class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {

        sort(g.begin(), g.end());
        sort(s.begin(), s.end());

        int g_size = g.size();
        int s_size = s.size();

        int child_idx = 0;
        int candy_idx = 0;

        while(child_idx < g_size && candy_idx < s_size){
            if(g[child_idx] > s[candy_idx]){
                 candy_idx++;
            }else{
                child_idx++;
                candy_idx++;
            }
        }

        return child_idx++;
        
    }
};

LeetCode 135 分发糖果

复制代码
class Solution {
public:
    int candy(vector<int>& ratings) {
        int n = ratings.size();
        vector<int> res(n, 1);

        // 先从左向右开始遍历
        for(int i=1;i<n;i++){
            if(ratings[i] > ratings[i-1]){
                res[i] = res[i-1] + 1;
            }
        }

        // 开始从右往左开始遍历
        for(int i=n-1;i>0;i--){
            if(ratings[i-1] > ratings[i]){
                res[i-1] = max(res[i-1], res[i] + 1);
            }
            
        }

        int result = accumulate(res.begin(), res.end(), 0);
        return result;
        
    }
};

LeetCode 435 无重叠区间

435. 无重叠区间 - 力扣(LeetCode)

复制代码
class Solution {
public:
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {


        // 基于区间结尾进行排序
        sort(intervals.begin(), intervals.end(), 
        [] (vector<int>& a, vector<int>& b){return a[1] < b[1];});
        int res = 0;
        int end_idx = intervals[0][1];
        for(int i=1;i<intervals.size();i++){
            if(intervals[i][0] < end_idx){
                res++;
            }else{
                end_idx = intervals[i][1];
            }
        }

        return res;
        
    }
};