day27 第八章 贪心算法 part01

455.分发饼干

排序,以饼干为中心,从大到小算

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 count = 0;
        for(int i=g.size()-1; i>=0; i--){
            if(index>=0 && s[index]>=g[i]){
                count++;
                index--;
            }
        }
        return count;
    }
};

376. 摆动序列

山峰山谷,用贪心时间复杂度O(N),prediff>=0/<=0是为了把0引入,开始计算,不然后面没法算。

class Solution {
public:
    // 山峰山谷
    int wiggleMaxLength(vector& nums) {
        if(nums.size()<=1){
            return nums.size();
        }
        int prediff = 0;
        int curdiff = 0;
        int result = 1;
        for(int i=0;i0 || prediff>=0 && curdiff<0){
                result++;
                prediff = curdiff;

            }
        } 
        return result;
    }
};

53. 最大子序和

前面所有的最大和如果<0, 只能给后面带来降低,所以舍弃,从0开始。

class Solution {
public:
    int maxSubArray(vector& nums) {
        int result = INT32_MIN;
        int sum = 0;
        for(int i=0;i result){
                result = sum;
            }
            if(sum < 0){
                sum = 0;
            }

        }
        return result;
    }
};

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