2022-04-15 11:12阅读: 31评论: 0推荐: 0

力扣-55-跳跃游戏

正经的贪心不好找哇,感觉一不留神就变成了动态规划。就连最经典的“找硬币”其实完全使用动态规划也不太对。

本体的关键在于一个“最大可到达长度”

思路:
// 1. 根据当前位置更新初始的最大可到达长度
// 2. 移动到下一个位置,判断是否可达(值是否小于等于最大可达长度)
// 3. 更新最大可达长度
// PS. 最后一个元素应该就不用在更新了吧

写代码:

class Solution {
public:
bool canJump(vector<int>& nums) {
// 如果数组中只有一个元素,那么不管这个元素值是多少,都是true
if(nums.size()==1){
return true;
}
int maxArrive = 0;
// 最后一个元素不用判断
for(int i = 0;i<nums.size()-1;++i){
// 这个判断多不多余?嗯…不吧,万一当前值是0呢,下一步就不一定能到达了
if(i<=maxArrive){
maxArrive=max(maxArrive,i+nums[i]);
// maxArrive = maxArrive>i+nums[i]?maxArrive:i+nums[i];
if(maxArrive>=nums.size()-1){
// 如果最后一个下标可达了,那么就不需要再继续了
return true;
}
}
}
return false;
}
};

image

哈哈哈,感觉这个成绩好不错啊,时间空间效率都很不错

image

试了下三目运算符替换掉max函数,好像变慢了

其实有了“最大到达长度”这个方向后,编码还是很简单的(对于中等题是不是太简单了😅最大的难点是思路吗难道)
最后让我细想一下,这真的是贪心吗🤔
每次选最大步长更新“最大可到达长度”是吧…有点像…感觉这题是不是就是专门刻意为贪心出出来的
感觉还是不得要领,再去找找题

本文作者:YaosGHC

本文链接:https://www.cnblogs.com/yaocy/p/16148180.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   YaosGHC  阅读(31)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起