leetcode-455.分发饼干(Easy)(贪心算法Part1)

贪心算法:采用贪心的策略,即保证每次的局部是最优的,从而使全局最优。

leetcode-455.Assign Cookies(Easy)
题目:

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。
对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

示例:

输入: g = [1,2,3], s = [1,1]
输出: 1
解释:
你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。
虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。
所以你应该输出1。

分析:

贪心算法先从局部入手。因为胃口最小的孩子最容易吃饱,所以先考虑这个孩子,简称第一个孩子。
为了使剩下的饼干尽量满足胃口较大的孩子,所以我们应该把大于等于第一个孩子胃口的,并且在其中最小的饼干给第一个孩子。
满足胃口最小的孩子之后,采取同样的策略,考虑剩下的孩子中胃口最小的,简称第二个孩子,然后去查找大于等于第二个孩子胃口的那些饼干们,并且在其中最小的尺寸的给第二个孩子。
以此类推,知道没有满足条件的饼干存在。

Code:

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;
    }
};

tips:

1、++i由于不生成临时变量,且以引用方式返回,所以没有构造与析构的开销,效率更高。所以尽量使用++i。
2、如何看算法?第一步,先看懂流程,;第二步,试数;第三步,自己写程序,调试。(转自郝斌老师)

你可能感兴趣的:(算法分析与设计,leetcode,算法,贪心算法)