当前位置:网站首页>LeetCode刷题day49
LeetCode刷题day49
2022-07-07 15:35:00 【51CTO】
今日刷题重点—贪心
文章目录
- 55. 跳跃游戏
55. 跳跃游戏
题目描述
给定一个非负整数数组 nums
,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。
示例 1:
示例 2:
思路分析
刚看到本题一开始可能想:当前位置元素如果是3,我究竟是跳一步呢,还是两步呢,还是三步呢,究竟跳几步才是最优呢?
其实跳几步无所谓,关键在于可跳的覆盖范围!
这个范围内,别管是怎么跳的,反正一定可以跳过来。
那么这个问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点!
每次移动取最大跳跃步数(得到最大的覆盖范围),每移动一个单位,就更新最大覆盖范围。
贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。
局部最优推出全局最优,找不出反例,试试贪心!
如图:
i每次移动只能在cover的范围内移动,每移动一个元素,cover得到该元素新的覆盖范围的补充,让i继续移动下去。
而cover每次只取 max(该元素数值补充后的范围, cover本身范围)
。
如果cover大于等于了终点下标,直接return true就可以了。
参考代码
45. 跳跃游戏 II
题目描述
给你一个非负整数数组 nums
,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
假设你总是可以到达数组的最后一个位置。
示例 1:
示例 2:
思路分析
本题要计算最小步数,那么就要想清楚什么时候步数才一定要加一呢?
贪心的思路,局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一。整体最优:一步尽可能多走,从而达到最小步数。
思路虽然是这样,但在写代码的时候还不能真的就能跳多远跳远,那样就不知道下一步最远能跳到哪里了。
所以真正解题的时候,要从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,以最小的步数增加覆盖范围.覆盖范围一旦覆盖了终点,得到的就是最小步数!
这里需要统计两个覆盖范围,当前这一步的最大覆盖和下一步最大覆盖。
如果移动下标达到了当前这一步的最大覆盖最远距离了,还没有到终点的话,那么就必须再走一步来增加覆盖范围,直到覆盖范围覆盖了终点。
如图:
参考代码
1005. K 次取反后最大化的数组和
题目描述
给你一个整数数组 nums
和一个整数 k
,按以下方法修改该数组:
- 选择某个下标
i
并将nums[i]
替换为-nums[i]
。
重复这个过程恰好 k
次。可以多次选择同一个下标 i
。
以这种方式修改数组后,返回数组 可能的最大和 。
示例 1:
示例 2:
示例 3:
思路分析
贪心的思路,局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。
那么如果将负数都转变为正数了,K依然大于0,此时的问题是一个有序正整数序列,如何转变K次正负,让 数组和 达到最大。
那么又是一个贪心:局部最优:只找数值最小的正整数进行反转,当前数值可以达到最大(例如正整数数组{5, 3, 1},反转1 得到-1 比 反转5得到的-5 大多了),全局最优:整个 数组和 达到最大。
那么本题的解题步骤为:
- 第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小
- 第二步:从前向后遍历,遇到负数将其变为正数,同时K–
- 第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完
- 第四步:求和
参考代码
如果有收获!!! 希望老铁们来个三连,点赞、收藏、转发。
创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客
边栏推荐
- [PHP] PHP interface inheritance and interface multi inheritance principle and implementation method
- 最新Android高级面试题汇总,Android面试题及答案
- 最新阿里P7技术体系,妈妈再也不用担心我找工作了
- Inner monologue of accidental promotion
- LeetCode-SQL第一天
- null == undefined
- 正在准备面试,分享面经
- LeetCode 1049. Weight of the last stone II daily question
- The latest interview experience of Android manufacturers in 2022, Android view+handler+binder
- Arduino 控制的双足机器人
猜你喜欢
skimage学习(3)——使灰度滤镜适应 RGB 图像、免疫组化染色分离颜色、过滤区域最大值
ByteDance Android gold, silver and four analysis, Android interview question app
The latest interview experience of Android manufacturers in 2022, Android view+handler+binder
值得一看,面试考点与面试技巧
预售17.9万,恒驰5能不能火?产品力在线,就看怎么卖
Test case management tool recommendation
最新Android面试合集,android视频提取音频
Process from creation to encapsulation of custom controls in QT to toolbar (I): creation of custom controls
最新Android高级面试题汇总,Android面试题及答案
Seaborn data visualization
随机推荐
Pisa-Proxy SQL 解析之 Lex & Yacc
skimage学习(3)——Gamma 和 log对比度调整、直方图均衡、为灰度图像着色
LeetCode 1043. 分隔数组以得到最大和 每日一题
LeetCode 312. 戳气球 每日一题
LeetCode 1981. 最小化目标值与所选元素的差 每日一题
LeetCode 1626. The best team without contradiction
【源码解读】| LiveListenerBus源码解读
数据中台落地实施之法
QT中自定义控件的创建到封装到工具栏过程(二):自定义控件封装到工具栏
Shallow understanding Net core routing
SlashData开发者工具榜首等你而定!!!
【Seaborn】组合图表:FacetGrid、JointGrid、PairGrid
A tour of gRPC:03 - proto序列化/反序列化
如何在博客中添加Aplayer音乐播放器
null == undefined
Seaborn data visualization
typescript ts基础知识之tsconfig.json配置选项
自定义View必备知识,Android研发岗必问30+道高级面试题
最新2022年Android大厂面试经验,安卓View+Handler+Binder
Reflections on "product managers must read: five classic innovative thinking models"