class Solution {
public:
bool canJump(vector<int>& nums) {
int k = 0;
for(int i = 0;i < nums.size();i++)
{
if(i > k) return false;
k = max(k,i + nums[i]);
}
return true;
}
};
代码中的canJump
函数接受一个整数向量nums
作为输入,并返回一个布尔值,表示是否可以从数组的第一个元素跳跃到最后一个元素。
让我们逐步分析这段代码:
-
变量初始化:
cpp复制代码
int k = 0; |
这里,k
表示当前能够到达的最远位置。初始时,k
为0,因为我们还没有开始跳跃。
2. 遍历数组:
cpp复制代码
for(int i = 0; i < nums.size(); i++) |
使用一个for循环遍历数组中的每个元素。
3. 检查当前位置是否可达:
cpp复制代码
if(i > k) return false; |
如果当前位置i
超出了k
所表示的最远可达位置,那么我们就无法到达当前位置,因此直接返回false
。
4. 更新最远可达位置:
cpp复制代码
k = max(k, i + nums[i]); |
对于每个位置i
,我们查看从该位置可以跳跃的最大长度nums[i]
,并更新k
为当前最远可达位置和新计算出的最远可达位置中的较大值。
5. 返回结果:
cpp复制代码
return true; |
如果循环结束后没有返回false
,那么说明我们可以到达数组的最后一个位置,因此返回true
。
总的来说,这段代码使用了一个贪心策略。它始终尝试跳跃到当前能够到达的最远位置,并在此过程中不断更新最远可达位置。如果某个时刻发现无法到达当前位置,那么就可以确定无法到达数组的最后一个位置。