力扣55. 跳跃游戏
题目来源(力扣):
https://leetcode.cn/problems/jump-game/description/
题目描述:
给一个数组nums,nums[i]表示位于i时可以往后移动0~i个位置,问能否从nums[0]通过某种方式走到末尾。
基本思路:
其实比起“贪心”更像是一个模拟题目,在往后走的过程中不断地更新当前能够到达的最右边的位置right,最后比较right与数组长度即可。
另外注意中途能够走的节点也要在right内,如果超过right了需要提前结束。
例如
[3, 2, 1, 0, 4, 2]
最多走到nums[4]=0处,nums[5]的下标5小于right=4,
因此中途就发现无法走到末尾,应该提前结束。
爱情也是。
代码如下,十分简洁:
代码实现:
class Solution
{
public:
bool canJump(vector<int> &nums)
{
int right = 0;
int len = nums.size();
for (int i = 0; i < len; i++)
{
if (i > right)
break;
right = max(right, i + nums[i]);
}
return right >= len - 1;
}
};
时间复杂度
O(n)
浙公网安备 33010602011771号