D31第八章 贪心算法 part01● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

第八章 贪心算法 part01

  • 理论基础
  • 455.分发饼干

class Solution {
    // 思路2:优先考虑胃口,先喂饱大胃口
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int count = 0;
        int start = s.length - 1;
        // 遍历胃口
        for (int index = g.length - 1; index >= 0; index--) {
            if(start >= 0 && g[index] <= s[start]) {
                start--;
                count++;
            }
        }
        return count;
    }
}
  • ● 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 sum = Integer.MIN_VALUE;
            int count = 0;
            for (int i = 0; i < nums.length; i++){
                count += nums[i];
                sum = Math.max(sum, count); // 取区间累计的最大值(相当于不断确定最大子序终止位置)
                if (count <= 0){
                    count = 0; // 相当于重置最大子序起始位置,因为遇到负数一定是拉低总和
                }
            }
           return sum;
        }
    }

你可能感兴趣的:(贪心算法,leetcode,算法,java,数据结构)