贪心1|455.分发饼干|376. 摆动序列|53. 最大子序和

一、455.分发饼干

题目连接:455. 分发饼干 - 力扣(LeetCode)

  1. 思路1:用贪心思想,将饼干数组和胃口数组先排序,然后遍历小孩数组,用小饼干优先满足胃口小的,并统计满足小孩数量。 注意遍历时不能先满足胃口大的,即从后向前遍历,因为遍历的是小孩数组,胃口大的不一定有饼干能满足。
  2. 思路2:将饼干数组和胃口数组先排序,然后遍历饼干数组,将大饼干满足胃口大的。
class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int count = 0;//思路1int start = 0;for(int i = 0; i < s.length && start < g.length; i++){if(s[i] >= g[start]){start++;count++;}}/*//思路2int start1 = s.length - 1;for(int i = g.length - 1; i >= 0; i--){if(start1 >= 0 && g[i] <= s[start1]){start1--;count++;}}*/return count;}
}

二、376. 摆动序列

题目连接:376. 摆动序列 - 力扣(LeetCode)

  1. 局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值。

    整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列。

  2. 在计算是否有峰值的时候,遍历的下标i ,计算pre(nums[i] - nums[i-1]) 和 cur(nums[i+1] - nums[i]),如果pre< 0 && cur > 0 或者 pre > 0 && cur < 0 此时就有波动就需要统计。

  3. 注意分析三种情况:上下坡中有平坡,数组首尾两端,单调坡中有平坡

  4. 上下坡中有平坡时,这里统一记录最右边的一个峰值,上坡中最右边是 pre 可以为0,cur < 0;下坡中最右边的是pre 可以为0,cur > 0.

  5. 数组首尾两端即数组只有两个元素时,可以写死,就是 如果只有两个元素,且元素不同,那么结果为2。 不另外讨论的话,为了放在规则里,让 result 从 1 开始(默认最右面有一个峰值) ,假设开头有个元素值与数组第一个元素值一样,这样就有3个元素了,即 pre = 0,最右面有一个峰值就是默认数组最后一个元素是峰值,遍历时遍历到nums.length - 2的位置。

  6. 单调坡中有平坡时,只需要在 这个坡度 摆动变化的时候,更新pre就行 ,不需要实时更新pre , 即将pre = cur放在if里(实时更新时是放在if后面的)。

class Solution {public int wiggleMaxLength(int[] nums) {if(nums.length == 1) return 1;int pre = 0;int cur = 0;int result = 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){result++;pre = cur;}}return result;}
}

三、53. 最大子序和

题目连接:53. 最大子数组和 - 力扣(LeetCode)

  1. 局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。

    全局最优:选取最大“连续和”

    局部最优的情况下,并记录最大的“连续和”,可以推出全局最优。 用贪心算法可以解决

  2. 区间的终止位置,就是如果sum取到最大值了,及时记录下来。 相当于是用result记录最大子序和区间和(变相的算是调整了终止位置)。

class Solution {public int maxSubArray(int[] nums) {int result = Integer.MIN_VALUE;int sum = 0;for(int i = 0; i < nums.length; i++){sum += nums[i];if(sum > result) result = sum;if(sum < 0) sum = 0;}return result;}
}

贪心1|455.分发饼干|376. 摆动序列|53. 最大子序和相关推荐

  1. 力扣贪心算法专题(一)455.分发饼干 376. 摆动序列 53. 最大子序和 122.买卖股票的最佳时机II 1005.K次取反后最大化的数组和 思路及C++实现 贪心算法 动态规划

    文章目录 贪心算法 455.分发饼干 思路 步骤 代码 376. 摆动序列 贪心算法 思路 分析 代码 动态规划 思路 步骤 代码 53. 最大子序和 暴力解法 双层for循环 贪心算法 思路 分析 ...

  2. 通俗易懂:贪心算法(一):分配问题 (力扣455分发饼干 和135分发糖果)

    看完本文,可以顺便解决leetcode以下两个题目: 455.分发饼干(简单) 135.分发糖果(困难) 一.通俗易懂的 贪心算法 |思想 贪心算法就是采用贪心的策略,保证每一次的操作都是局部最优的, ...

  3. 力扣455.分发饼干(java)-贪心算法思想及基本步骤

    文章目录 贪心算法核心思想 基本步骤 455.分发饼干(Java) 1.需要考虑的问题 2.方案(序号分别与问题对应) 贪心算法核心思想 贪心算法的基本思想是每一步都做出当时看起来最佳的选择,可以理解 ...

  4. LeetCode 376. 摆动序列 中等难度

    376. 摆动序列 题目: 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如: [1,7,4,9 ...

  5. 【LeetCode】376. 摆动序列(图解)

    376. 摆动序列 一.问题 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4, ...

  6. 【LeetCode】455. 分发饼干(图解)

    文章目录 455. 分发饼干 一.问题 二.注意 三.示例 四.算法思路 五.提交代码 六.测试代码 七.补充 455. 分发饼干 一.问题 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是, ...

  7. Leetcode-D35-数组-455. 分发饼干

    一.复习 1.136. 只出现一次的数字 利用先排序的思想,再判断即可 2.167. 两数之和 II - 输入有序数组 哈希表 二.455. 分发饼干 今天找了一本刷题书,按照这个顺序去刷,应该会好一 ...

  8. 【LeetCode每日一题】——376.摆动序列

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[解题思路] 七[题目提示] 八[题目进阶] 九[时间频度] 十[代码实现] 十一[提交结果] 一[题目类别 ...

  9. Java实现 LeetCode 455 分发饼干

    455. 分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干.对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸:并且每块饼干 ...

最新文章

  1. Linux gcc 制作动/静态链接库
  2. 欧盟发布《人工智能道德准则》:「可信赖 AI」才是 AI 的指路明灯
  3. c语言 中多一个分号,问什么C程序里总是提示缺少分号;,而明明有分号?
  4. 我心中的MySQL DBA
  5. 【Python CheckiO 题解】Text Editor
  6. 有了“质量墙”,程序员再也没有秃头的烦恼
  7. 常见web攻击方式与防御方法
  8. 磁力计 姿态 matlab,磁力计如何用来计算姿态(1)
  9. springboot使用thymeleaf模板引擎时出现org.xml.sax.SAXParseException的原因与解决办法
  10. pandasSeries模块
  11. apache24+php8配置
  12. Elasticsearch模块——CRUD
  13. Web项目中手机注册短信验证码实现的全流程及代码
  14. yum源本地配置和网络源配置——超级完整详细
  15. mybatis 读取blob数据
  16. MySQL数据库优化高频面试题(最新版)
  17. npm包发布正式和测试版
  18. 嵌入式的时间概念:GMT,UTC,CST,DST,RTC,NTP,SNTP,NITZ
  19. 第一册:lesson thirteen.
  20. 随机森林与极端随机森林

热门文章

  1. 双非计算机保研er的逆袭指南~
  2. 实现导航栏渐变色,隐藏(类似知乎日报的主界面)
  3. 云计算行业现状及未来发展趋势
  4. 3D打印机ender3-V2通过上位机以及下位机的安装并使用klipper的总体流程
  5. CentOS最常用命令及快捷键整理
  6. Ubuntu+nginx+ftmp+obs搭建直播流服务器学习
  7. NCL 错误 fatal:Loop end must be scalar, can‘t execute loop
  8. 计算机的键盘怎么画,【1人回答】怎么用CAD画出电脑的键盘??-3D溜溜网
  9. 沉痛哀悼 | 上海交通大学张大兵教授不幸逝世,天妒英才!
  10. CSS兼容各个浏览器