leetcode 55. 跳跃游戏
算法瘾士 · · 3399 次点击 · · 开始浏览给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个位置。
示例 1:
输入: [2,3,1,1,4]
输出: true
解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。
示例 2:
输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。
这道题是刚刚做的,可以用贪心的思路。
我分享这道题的原因是因为它更适合反过来想。我们可以从数组的倒数第二个个元素看起,每次往前遍历,如果当前的元素能够到达最后一个位置,那么我们把当前位置开始到最后全部"切断",以当前元素为最后一个元素,重复第一次的过程就好了。而最后,如果我们遍历到数组的第一个元素,那么此题返回true,否则,你懂得。
话说再少都嫌多,上代码才是王道:
func canJump(nums []int) bool {
l := len(nums) - 1
for i := l-1; i >=0 ; i-- {
if nums[i]+i >= l {
l = i
}
}
return l <= 0
}
代码不长,应该就不用注释了。其实这次的代码整体来说我是比较满意的。因为时间复杂度O(n)应该是最少了,然后代码量也比别人的少一些哈哈。继续努力咯~
算法梦想家,来跟我一起玩算法,玩音乐,聊聊文学创作,咱们一起天马行空!
图片描述
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个位置。
示例 1:
输入: [2,3,1,1,4]
输出: true
解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。
示例 2:
输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。
这道题是刚刚做的,可以用贪心的思路。
我分享这道题的原因是因为它更适合反过来想。我们可以从数组的倒数第二个个元素看起,每次往前遍历,如果当前的元素能够到达最后一个位置,那么我们把当前位置开始到最后全部"切断",以当前元素为最后一个元素,重复第一次的过程就好了。而最后,如果我们遍历到数组的第一个元素,那么此题返回true,否则,你懂得。
话说再少都嫌多,上代码才是王道:
func canJump(nums []int) bool {
l := len(nums) - 1
for i := l-1; i >=0 ; i-- {
if nums[i]+i >= l {
l = i
}
}
return l <= 0
}
代码不长,应该就不用注释了。其实这次的代码整体来说我是比较满意的。因为时间复杂度O(n)应该是最少了,然后代码量也比别人的少一些哈哈。继续努力咯~
算法梦想家,来跟我一起玩算法,玩音乐,聊聊文学创作,咱们一起天马行空!
图片描述