算法day23-贪心(1)

目录

  1. 分发饼干
  2. 摆动序列
  3. 最大子序和

二、分发饼干

 https://leetcode.cn/problems/assign-cookies/?envType=problem-list-v2&envId=8At1GmaZ

 

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        if(s.length == 0 || (s[s.length-1] < g[0])){       //若最大数量的饼干比胃口最小的
            return 0;
        }
        int i = 0;  //孩子的索引
        for(int x : s){
            if(i < g.length && g[i] <= x){
                i++;
            }
        }
        return i;
    }
}

 

三、摆动序列

 https://leetcode.cn/problems/wiggle-subsequence/?envType=problem-list-v2&envId=8At1GmaZ

 

class Solution {
    public int wiggleMaxLength(int[] nums) {
        if (nums.length < 2) return nums.length;

        int preDiff = nums[1] - nums[0];
        //若第二个元素与第一个元素的差值不为0,则结果为2
        int count = preDiff != 0 ? 2 : 1;       

        for (int i = 2; i < nums.length; i++) {
            int diff = nums[i] - nums[i - 1];
            if ((preDiff <= 0 && diff > 0) || (preDiff >= 0 && diff < 0)) {
                //为了不漏掉第一个有效的波动趋势
                count++;
                preDiff = diff; // 更新上一个差值
            }
        }
        return count;
    }
}

四、最大子序和

https://leetcode.cn/problems/maximum-subarray/description/?envType=problem-list-v2&envId=8At1GmaZ

 

class Solution {
    public int maxSubArray(int[] nums) {
        int minPrefix = 0; 
        int maxSubSum = Integer.MIN_VALUE;
        int prefix = 0;
        for (int num : nums) {
            prefix += num;      //求当前的前缀和
            // 用当前最大的前缀和 - 前面最小的前缀和
            maxSubSum = Math.max(maxSubSum, prefix - minPrefix);
            minPrefix = Math.min(minPrefix, prefix);
        }
        return maxSubSum;
    }
}

 

posted @ 2025-05-22 16:06  筱倩  阅读(11)  评论(0)    收藏  举报