力扣-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; } };
哈哈哈,感觉这个成绩好不错啊,时间空间效率都很不错
试了下三目运算符替换掉max函数,好像变慢了
其实有了“最大到达长度”这个方向后,编码还是很简单的(对于中等题是不是太简单了😅最大的难点是思路吗难道)
最后让我细想一下,这真的是贪心吗🤔
每次选最大步长更新“最大可到达长度”是吧…有点像…感觉这题是不是就是专门刻意为贪心出出来的
感觉还是不得要领,再去找找题
本文作者:YaosGHC
本文链接:https://www.cnblogs.com/yaocy/p/16148180.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步