| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> [LeetCode]-贪心 -> 正文阅读 |
|
[数据结构与算法][LeetCode]-贪心 |
前言记录刷 LeetCode 时遇到的贪心算法相关题目 452. 用最少数量的箭引爆气球看到区间操作,本来想用差分来做的,写完了一测,数组太大,因为有个样例 [[-2147483646,-2147483645],[2147483646,2147483647]]。所以想看看能不能调整一下数组下标对应关系,一看题意,每个气球区间的取值是 [-231,231 - 1],看来怎么调都不行了
55. 跳跃游戏要想知道能不能到达最后一个位置,我们只需要维护每跳一步所能到达的最远位置 maxFar,只要发现 maxFar 大于等于最后一个位置的位置,那就可以立马判定能够到达最后一个位置。所以我们只需要贪心地计算并维护这个最远距离即可
45. 跳跃游戏 II假设 nums[0] 等于 x (x 肯定大于等于1),那么第一步所能跳出的范围就为 [1,x],这并不是说我们就要这第一步就一定要去到 x,这是局部最优解但并不一定能得到全局最优解 我们应该想到的是,[1,x] 是我们第一跳所能跳到的范围,换句话说,第一跳的目标位置可以是这个区间中任意一个位置,再换句话说,第二跳的起始位置必须是这个区间中的位置,但 可以是这个区间中的任何一个位置 所以,对于这个区间中的每一个位置 i,我们都可以去计算它们往后跳一步所能到达的最远位置,即 i + nums[i],其中最大的一个结果,不就是第二跳所能到达的最远距离吗,确切的说,是第一 + 第二跳所能跳到的最远位置。虽然可以,但我们没必要知道跳出这个最远距离的起始位置具体是哪,只需要知道它小于 x —— 上一跳的最远位置,即可。其实,我们也没必要知道第一跳的范围是 [1,x],我们只需要知道最远位置是 x 即可,可以把坐标 0 看成是第 0 跳的最远位置,这样第一跳也就不具特殊性了 以这种策略计算下去,很显然最终得到的就会是全局最小跳数 虽然没提到 贪心 二字,但其实我们的算法中,每一跳的 最远 距离是一个很重要的考量,也可以看成是贪心的体现之处了 要注意题目说明了总是可以到达最后一个位置,所以不用考虑跳到中间无法继续跳下去的情况
1353. 最多可以参加的会议数目对于在某个时间点时一系列可以参加的会议中,应该贪心选择其中结束时间最小的一个 由于每个时间点的选择随着时间点 day 的变化会不断变化,需要动态维护 所以就需要使用到 堆/优先队列,而且是要选择结束时间最小的,所以要是一个元素为会议结束时间的小顶堆
300. 最长递增子序列对于一个递增子序列,如果末尾元素是较小的,那么在后续找到更多大于这个末尾元素的数的可能性就更大,也就是说到最后找到的最长递增子序列就会更长 所以对于一系列相同长度的最长递增子序列,我们都贪心地选择末尾元素最小的一个,并使用一个数组 min 保存每个长度的最长递增子序列的末尾元素,即,min[i] 表示长度为 i 的最长递增子序列的末尾元素
1011. 在D天内送达包裹的能力(贪心+二分)对于最值问题,优先考虑 贪心+二分 的做法是否可行 (谁能拒绝二分呢)
435. 无重叠区间题目说 “返回需要移除区间的最小数量,使剩余区间互不重叠”,换一个角度来说意思就是从所有区间中选无重叠区间最多能选出多少个 如果我们从左往右选区间,为了后续能选出更多的区间,我们应该贪心地选择 右边界更小 的区间,这样右边剩余的空间更多,可以选出的区间也就会更多 因此,我们先将所有区间按照右边界大小进行升序排序,然后从左往右开始选区间,每选一个区间,记录其右边界 lastRight,再继续往右遍历时遇到的第一个左边界大于等于 lastRight 的区间就是要选的下一个区间,因为所有区间已经按照右边界从小到大排序,选出的区间只需要再满足一个 “无重叠” 的条件即可
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:38:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |