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

  •  理论基础 

贪心的本质是选择每一阶段的局部最优,从而达到全局最优

贪心算法一般分为如下四步:

  • 将问题分解为若干个子问题
  • 找出适合的贪心策略
  • 求解每一个子问题的最优解
  • 将局部最优解堆叠成全局最优解

  •  455.分发饼干 

感觉还没背熟,要多刷这个章节

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int res = 0;
        int idx = s.length - 1;
        //遍历胃口
        for (int i =g.length - 1; i >= 0;  i--) {
            if (idx >= 0 && s[idx] >= g[i]) {
                res++;
                idx--;
            }
        }
        return res;
    }
}

  •  376. 摆动序列 

三种情况:

1. 上下坡中有平坡

2. 数组首尾两端

3. 单调坡中有平坡

class Solution {
    public int wiggleMaxLength(int[] nums) {
        if (nums.length <= 1) return nums.length;
        int cur = 0;
        int pre = 0;
        int res = 1;

        for (int i = 0; i < nums.length - 1; i++) {
            cur = nums[i + 1] - nums[i];
            //出现峰值
            if (pre <= 0 && cur > 0 || pre >= 0 && cur < 0) {
                res++;
                pre = cur;
            }
        }
        return res;
    }
}

  •  53. 最大子序和 
class Solution {
    public int maxSubArray(int[] nums) {
        int maxToCur = nums[0];
        int sum = nums[0];

        for (int i = 1; i < nums.length; i++) {
            maxToCur = Math.max(maxToCur + nums[i], nums[i]);
            sum = Math.max(maxToCur, sum);
        }
        return sum;
    }
}

你可能感兴趣的:(代码随想录二刷,算法)