当前位置:网站首页>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用完
- 第四步:求和
参考代码
如果有收获!!! 希望老铁们来个三连,点赞、收藏、转发。
创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客
边栏推荐
- LeetCode 1986. The minimum working time to complete the task is one question per day
- LeetCode 1654. 到家的最少跳跃次数 每日一题
- 自定义View必备知识,Android研发岗必问30+道高级面试题
- LeetCode-SQL第一天
- LeetCode 213. 打家劫舍 II 每日一题
- 第九届 蓝桥杯 决赛 交换次数
- [designmode] proxy pattern
- QT视频传输
- [image sensor] correlated double sampling CDs
- The latest interview experience of Android manufacturers in 2022, Android view+handler+binder
猜你喜欢

如何选择合适的自动化测试工具?

Interface oriented programming

Skimage learning (3) -- adapt the gray filter to RGB images, separate colors by immunohistochemical staining, and filter the maximum value of the region

skimage学习(3)——使灰度滤镜适应 RGB 图像、免疫组化染色分离颜色、过滤区域最大值
Direct dry goods, 100% praise

QT中自定义控件的创建到封装到工具栏过程(二):自定义控件封装到工具栏

QT中自定义控件的创建到封装到工具栏过程(一):自定义控件的创建

掌握这套精编Android高级面试题解析,oppoAndroid面试题

Pychart ide Download

skimage学习(2)——RGB转灰度、RGB 转 HSV、直方图匹配
随机推荐
值得一看,面试考点与面试技巧
LeetCode 1981. Minimize the difference between the target value and the selected element one question per day
Ray and OBB intersection detection
掌握这个提升路径,面试资料分享
浅浅理解.net core的路由
使用JSON.stringify()去实现深拷贝,要小心哦,可能有巨坑
Test case management tool recommendation
SIGGRAPH 2022最佳技术论文奖重磅出炉!北大陈宝权团队获荣誉提名
ORACLE进阶(六)ORACLE expdp/impdp详解
Build an all in one application development platform, light flow, and establish a code free industry benchmark
谈谈 SAP 系统的权限管控和事务记录功能的实现
LeetCode 300. 最长递增子序列 每日一题
mysql实现两个字段合并成一个字段查询
两类更新丢失及解决办法
Shallow understanding Net core routing
LeetCode 152. 乘积最大子数组 每日一题
Horizontal and vertical centering method and compatibility
QT 图片背景色像素处理法
[designmode] proxy pattern
LeetCode 1049. 最后一块石头的重量 II 每日一题