LeetCode题目
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可跳跃的最大长度。判断你是否能够到达最后一个位置。
跳跃游戏
思路
刚刚看到这个题目的时候想了半天一点思路都没有,于是只能看看别人的思路然后自己写(毕竟太菜了)。
这个的大体思路就是一个贪心算法(看之前也要了解一下贪心),说白了就是大事化小,小事化了的解决方法,先将问题分解成子问题,然后找到子问题的最优解,然后子问题最优解的叠加就是最后问题的最优解。
然后解这个题目的思路总结成一句话就是:每一次遍历都取前面所有遍历元素所能到达最远位置的最大值,如果该最大值大于或等于给定数组nums的长度,则说明游戏成功,反之则失败。
代码
class Solution {
public boolean canJump(int[] nums) {
int len = nums.length;
int max = 0;
if (len <= 1) {
return true;
}
for (int i=0;i<len;++i) {
if (i>max) {
return false;
}
int temp = max;
if (nums[i] + i > temp) {
max = nums[i] + i;
} else {
max = temp;
}
}
return true;
}
}
结果
![](https://img.haomeiwen.com/i10549596/2e437b0b2ad23f35.png)
网友评论