一、贪心算法

本文详细介绍了贪心算法的基本思想,并结合LeetCode题目,包括分配问题、区间问题和练习题,如Assign Cookies、Candy、Non-overlapping intervals等,通过实例解析贪心算法的解题策略和步骤。
摘要由CSDN通过智能技术生成

一、贪心算法

保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的。

1 分配问题

1.1 Assign Cookies(Easy) 455.分发饼干

https://leetcode-cn.com/problems/assign-cookies/

题解:

饥饿度最小的孩子最容易吃饱,所以先考虑这个孩子,把大于等于这个孩子饥饿度的、且大小最小的饼干给这个孩子。所以先对孩子和饼干按照从小到大排序然后循环筛选。

class Solution {
   
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
   
        sort(g.begin(), g.end());
        sort(s.begin(), s.end());

        int child = 0, cookie = 0;
        while (child < g.size() && cookie < s.size()){
   
            if (g[child] <= s[cookie]) child++;
            cookie++;
        }
        return child;
    }
};

1.2 Candy(hard) 135.分发糖果

https://leetcode-cn.com/problems/candy/

题解:

两次遍历,先从左到右,然后从右到左,判断两边的数值是否比中间的大。

class Solution {
   
public:
    int candy(vector<int>& ratings) {
   
        // sort(ratings.begin(), ratings.end());
        int length = ratings.size();
        if (length < 2) return length;
        vector<int> nums(length, 1);
        for (int i = 1; i < ratings.size(); i++){
   
            if (ratings[i] > ratings[i-1]){
   
                nums[i] = nums[i-1] + 1;
            }
        }
        for (int i = length - 1; i > 0; i--){
   
            if (ratings[i-1] > ratings[i]){
   
                nums[i-1] = max(nums[i-1], nums[i]+ 1);
            }
        }
        return accumulate(nums.begin(), nums.end
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值