Day27 455. 分发饼干 | 376. 摆动序列 | 53. 最大子数组和

54 阅读1分钟

455. 分发饼干 - 力扣(LeetCode)

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

376. 摆动序列 - 力扣(LeetCode)

方法一:

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

方法二

class Solution {
    public int wiggleMaxLength(int[] nums) {

        int down = 1,up = 1;
        for(int i = 1;i<nums.length;i++){
            if(nums[i] > nums[i-1]){
                up = down + 1;
            }
            else if(nums[i]<nums[i-1]){
                down = up +1;
            }
        }
        return nums.length == 0?0:Math.max(down,up); 
    }
    
}

方法三

class Solution {
    public int wiggleMaxLength(int[] nums) {
        //构造差值序列,遇到连续正就跳过,长度=差序列+1
        List<Integer> ls = new ArrayList<>();
        for(int i = 1 ;i < nums.length;i++){
            int num = nums[i]-nums[i-1];
            if(ls.size()> 0 && ls.getLast()*num < 0 ) ls.add(num);
            if(ls.size() == 0&& num != 0 ) ls.add(num);

        }
        return ls.size()+1;

    }
}

53. 最大子数组和 - 力扣(LeetCode)

class Solution {
    public int maxSubArray(int[] nums) {
        int ans = nums[0];
        int sum = 0;
        for (int num : nums) {
            if (sum > 0) {
                sum += num;
            } else {
                sum = num;
            }
            ans = Math.max(ans, sum);
        }
        return ans;
    }
}