Day 31 | 贪心算法 理论基础 、455.分发饼干 、 376. 摆动序列 、 53. 最大子序和

理论基础

文章讲解

455.分发饼干

题目
文章讲解
视频讲解

思路:从小饼干开始喂小胃口

java 复制代码
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. 摆动序列

题目
文章讲解
视频讲解

思路:初始时preDiff可能为0

java 复制代码
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. 最大子序和

题目
文章讲解
视频讲解

思路:在处理负数的情况下,对于任何负数,如果将其加入当前的和中,都会导致和变小。因此,如果当前的和已经为负数,那么加上任何负数都不会使和变大,因此应该将当前的 count 重置为0

java 复制代码
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;
    }
}
相关推荐
lueluelue475 小时前
LeetCode:链表
算法·leetcode·链表
橘子汽水1688 小时前
Leetcode 23,543合并K个升序链表,二叉树的直径
算法·leetcode·链表
huameinan狮子8 小时前
Adaboost算法原理与计算实例
算法
别怪我很水8 小时前
API中提供了VelocityTracker类用于计算触摸事件MotionEvent的速度,而其内部默认使用的方法就是最小二乘法,本 ...
算法·gitee·最小二乘法
Re.不晚11 小时前
挑战做100道力扣算法- DAY1
算法·leetcode·职场和发展
蓝悦无人机11 小时前
《Planning algorithms》读书笔记——第1章 引言
算法·读书笔记·规划算法·lavalle
Sagittarius_A*12 小时前
分组密码基础(二):Feistel 结构与 DES 的设计思想
算法·信息安全·密码学·des·数论
青山木12 小时前
Hot 100 --- 搜索插入位置
java·数据结构·算法·leetcode
alexwang21112 小时前
HDU 4348 详细题解
c++·算法·题解·hdu·主席树·可持久化数据结构·可持久化线段树