代码随想录算法训练营第三十一天|455.分发饼干 、 376. 摆动序列 、 53. 最大子序和

455.分发饼干

1.最小的饼干分给最小胃口,注意循环的顺序

class Solution {
public:
    int findContentChildren(vector& g, vector& s) {
        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. 摆动序列

1.从头开始查找---但存在问题是否为最长子列(X)   

查找局部峰值 ----注意平坡的情况

class Solution {
public:
    int wiggleMaxLength(vector& nums) {
        if(nums.size() <= 1) return nums.size();

        int curdiff = 0;
        int prediff = 0;
        int result = 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) ){
                result++;
                prediff = curdiff;

            }

        }
    return result;
    }
};

53. 最大子序和 

1.每次查找到连续和为负数时立即放弃,从下一个元素重新计算连续和

class Solution {
public:
    int maxSubArray(vector& nums) {
        int result = INT_MIN;
        int count = 0;

        for(int i = 0; i < nums.size(); i++){
            count += nums[i];
            if(count > result){
                result = count;
            }

            if (count <= 0) count = 0;
            
        }
        return result;

    }
};

你可能感兴趣的:(代码随想录,算法,leetcode,c++)