不论今天过得很好还是过得很有趣。 明天都是新的开始。

题目描述:

跳跃游戏

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false

解题代码:

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public:
bool canJump(vector<int>& nums) {
int most = 0;
for (int i = 0; i < nums.size(); i++) {
if (i > most) return false;
k = max(most, i + nums[i]);
}
return true;
}
};

image-20231004194923166

解读与收获:

遍历一遍数组,看看能到达的最远距离是否比数组要长,如果是就能到达。开始想麻烦了,把所有之后能跳到的点都遍历一遍,找最远的,然后不停重复这个过程,实际上只需要记录一个最远距离,如果。另外如果i > most说明i的值已经超过了最远距离,说明most一定在某处停止更新,永远不会到达终点。