Problem: 55. 跳跃游戏
文章目录
- 题目描述
- 思路
- 复杂度
- Code
题目描述
思路
将题目稍作转化:验证最远走到的距离是否超出组数;
1.获取数组nums的长度n,定义int变量farthest初始化为0;
2.从0~n-1循环每次更新farthes的长度farthest = max(farthest, i + nums[i]);
3.若中途遇到0则跳不出去需要进行判断(若farthest <= i,则直接返回false)
4.最终判断farthest是否大于n - 1;
复杂度
时间复杂度:
O ( n ) O(n) O(n);其中 n n n为数组nums的大小
空间复杂度:
O ( 1 ) O(1) O(1)
Code
class Solution {
public:
/**
* Dynamic programming
*
* @param nums Given array
* @return bool
*/
bool canJump(vector<int>& nums) {
int n = nums.size();
int farthest = 0;
for (int i = 0; i < n - 1; ++i) {
farthest = max(farthest, i + nums[i]);
//Meet to 0
if (farthest <= i) {
return false;
}
}
return farthest >= n - 1;
}
};