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

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

一、力扣455.分发饼干

题目链接
思路:先排序,然后用饼干匹配,配不上就换下一个

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int i = 0, j = 0, num = 0;
        while (i < g.length && j < s.length) {
            if (s[j] >= g[i]) {
                num++;
                i++;
            }
            j++;
        }
        return num;
    }
}

二、力扣376. 摆动序列

题目链接
思路:单调不计数,调变化时才计数,考虑初始节点,考虑非单调情况

class Solution {
    public int wiggleMaxLength(int[] nums) {
        if (nums.length <= 1) {
            return nums.length;
        }
        //当前差值
        int curDiff = 0;
        //上一个差值
        int preDiff = 0;
        int count = 1;
        for (int i = 1; i < nums.length; i++) {
            //得到当前差值
            curDiff = nums[i] - nums[i - 1];
            //如果当前差值和上一个差值为一正一负
            //等于0的情况表示初始时的preDiff
            if ((curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0)) {
                count++;
                preDiff = curDiff;
            }
        }
        return count;
    }
}

三、力扣53. 最大子序和

题目链接
思路:

class Solution {
    public int maxSubArray(int[] nums) {
        if (nums.length == 1) return nums[0];
        int max = Integer.MIN_VALUE, count = 0;
        for (int i = 0; i < nums.length; i++) {
            count += nums[i];
            if (max < count) max = count;
            if (count <= 0) count = 0;
        }
        return max;
    }
}

你可能感兴趣的:(算法,数据结构,排序算法)