0
点赞
收藏
分享

微信扫一扫

算法专栏之贪心算法专题

读思意行 2022-02-07 阅读 67

文章目录

一、对贪心算法的理解

  • 贪心算法是最接近人类智慧的算法,贪心算法的思想是每次都贪图局部最优,从而得到一个全局最优解。作为一个新时代中国青年,我们懂得,如果总是贪图眼前最优,最后并不一定能够得到全局最优。所以,贪心算法也具有其局限性,部分问题通过贪心算法得到的并不是最优解。
  • 既然不是所有的问题都可以通过贪心算法来解决,那么我们又如何判断贪心算法是否适用于某一道算法题呢?其实,我们很难在算法笔试有限的时间内,通过数学证明某种贪心算法策略是否能够得到全局最优。因此,我们退而求其次,用算法题的暴力解法来验证贪心策略是否正确。

二、贪心算法的常见套路

对于有传递性的数据,通常情况下我们可以通过排序建堆来解决。

三、经典题目及详解

3.1 分发饼干

题意

题解

int findContentChildren(vector<int>& g, vector<int>& s) {
	// 存在数组为空直接返回0
	if (g.size() == 0 || s.size() == 0) {
        return 0;
    }
    
    // 对存放孩子胃口值和饼干尺寸的两个数组分别进行升序排序
    sort(g.begin(), g.end());
    sort(s.begin(), s.end());

	// 胃口值数组索引变量、饼干尺寸数组索引变量、最终返回值变量
    int gi = 0, si = 0, res = 0;
    // 遍历升序排序后的数组,有数组超出边界则结束循环
    while (gi < g.size() && si < s.size()) {
        if (s[si] >= g[gi]) {
       		// 若当前饼干大于当前胃口值,则返回值加1,且两个数组的指针都往后移动
            res ++;
            si ++;
            gi ++;
        } else {
        	// 若当前饼干小于当前胃口值,则饼干尺寸数组索引向后移动寻找更大的饼干
            si ++;
        }
    }
    return res;
}
举报

相关推荐

0 条评论