力扣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)

posted @ 2024-11-08 19:18  HB_Computer  阅读(20)  评论(0)    收藏  举报