跳跃数组
原题在这里:
概述题意:
给定数组num,num[i]表示可以从i开始转移到下一个num数组下标的范围,问能否达到最后一个下标。
理所应当的,很自然的,我想到了dfs
但是dfs效率不高,所以还是写了剪枝——vis标记数组去重。

class Solution { int l; vector<int> vis, num; void dfs(int x) { if (x >= l) { vis[l - 1] = 1; return; } if (vis[x]) return; vis[x] = 1; for (int i = num[x]; i > 0; --i) if (!vis[l - 1]) dfs(x + i); } public: bool canJump(vector<int> &nums) { num = nums, l = nums.size(); vis = vector<int>(l, 0); dfs(0); return vis[l - 1] == 1; } };
论高效率还是得动态规划O(N)
analyse:
因为考虑的是最长能到达的下标,有num[i]跳跃距离为[i,i+num[i]],
所以考虑维护一下最长可到达的下标ans,一次遍历数组即可
遍历条件即为i<=ans&&i<num.size()
code:
class Solution { public: bool canJump(vector<int> &nums) { int l = nums.size(), ans = 0; for (int i = 0; i <= ans && i < l; ++i) ans = max(ans, i + nums[i]); return ans >= l - 1; } };
【Over】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!