代码随想录算法训练营第17期第31天 | 理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和

理论基础

什么是贪心:

贪心的本质是选择每一阶段的局部最优,从而达到全局最优

贪心没有套路,说白了就是常识性推导加上举反例

455. 分发饼干 

这里有两种思路,一种是先满足小胃口的,一种是先满足大胃口的孩子;

1.先满足小胃口:注意这里要遍历饼干,让饼干逐渐变大,当满足孩子的胃口时,孩子计数加1;而且这里要注意,饼干再多,最大不能超过孩子的数量

2.先满足大胃口:这里要遍历孩子,不然可能会存在某个孩子胃口太大,所有饼干都不满足的情况;以及注意这里边界值的处理,初始值是size-1,界限是>=0;

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


class Solution {
public:
    int findContentChildren(vector& g, vector& s) {
        sort(g.begin(), g.end());
        sort(s.begin(), s.end());
        int index = s.size()-1;
        int cnt = 0;
        for(int i = g.size()-1; i >= 0; i--){
            if (index >= 0 and s[index] >= g[i])
            {
                index--;
                cnt++;
            }
        }
        return cnt;
    }
};

376. 摆动序列

 

你可能感兴趣的:(算法)