贪心算法1

贪心算法思考

想清楚局部最优,想清楚全局最优,感觉局部最优是可以推出全局最优,并想不出反例,那么就试一试贪心算法

例题:

455. 分发饼干

方法:小饼干给胃口小的

先排序两个数组,遍历饼干数组,用index表示小孩子的下标,如果饼干能喂饱小孩子,那么index移动,喂不饱就不移动(index),当遍历完饼干index表示的就是能喂饱多少个孩子

cpp 复制代码
class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        if (s.size() == 0) return 0;
        sort(g.begin(), g.end());
        sort(s.begin(), s.end());
        int index = 0;
        for (int i = 0; i < s.size(); i++) {
            if (index < g.size() && g[index] <= s[i]) index++;
        }
        return index;
    }
};

376. 摆动序列

方法:删除单调坡度上的节点

局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值。整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列。

cpp 复制代码
class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        if (nums.size() <= 1) return nums.size();
        int curDiff = 0, preDiff = 0;
        int ret = 1;
        for (int i = 0; i < nums.size() - 1; i++) {
            curDiff = nums[i + 1] - nums[i];
            if ((preDiff >= 0 && curDiff < 0) || (preDiff <= 0 && curDiff > 0)) {
                ret++;
                preDiff = curDiff;
            }
        }
        return ret;
    }
};

也可以用动态规划做这个题,在此不提

53. 最大子数组和

方法:抛弃连续和为负数的情况

局部最优:当前"连续和"为负数的时候立刻放弃,从下一个元素重新计算"连续和",因为负数加上下一个元素 "连续和"只会越来越小。全局最优:选取最大"连续和"

cpp 复制代码
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int ret = INT_MIN;
        int count = 0;
        for (int i = 0; i < nums.size(); i++) {
            count += nums[i];
            if (count > ret) ret = count;
            if (count < 0) count = 0;
        }
        return ret;
    }
};

也可以用动态规划做这个题,在此不提

相关推荐
普普通通的南瓜9 分钟前
网站提示 “不安全”?免费 SSL 证书一键解决
网络·数据库·网络协议·算法·安全·iphone·ssl
聆风吟º35 分钟前
【数据结构入门手札】数据结构基础:从数据到抽象数据类型
数据结构·数据类型·逻辑结构·数据对象·物理结构·数据项·数据元素
啊吧怪不啊吧37 分钟前
二分查找算法介绍及使用
数据结构·算法·leetcode
知识搬运工人44 分钟前
对比 DeepSeek(MLA)、Qwen 和 Llama 系列大模型在 Attention 架构/算法层面的核心设计及理解它们的本质区别。
算法
蒋星熠1 小时前
全栈开发实战指南:从架构设计到部署运维
运维·c++·python·系统架构·node.js·devops·c5全栈
杜子不疼.1 小时前
【C++】深入拆解二叉搜索树:从递归与非递归双视角,彻底掌握STL容器的基石
开发语言·c++
天若有情6731 小时前
从零实现轻量级C++ Web框架:SimpleHttpServer入门指南
开发语言·前端·c++·后端·mvc·web应用
修行者Java1 小时前
JVM 垃圾回收算法的详细介绍
jvm·算法
AndrewHZ1 小时前
【图像处理基石】什么是光流法?
图像处理·算法·计算机视觉·目标跟踪·cv·光流法·行为识别
mjhcsp2 小时前
C++ 三分查找:在单调与凸函数中高效定位极值的算法
开发语言·c++·算法