數組 A 中每個元素代表在該位置最大跳躍長度。初始站在索引 0,判斷能否到達最後一個索引。
bool canJump(vector& nums) {
int reach = 0, n = nums.size();
for (int i = 0; i < n && i <= reach; ++i)
reach = max(reach, i + nums[i]);
return reach >= n-1;
}
bool canJump(vector& nums) {
int last = nums.size() - 1;
for (int i = last - 1; i >= 0; --i)
if (i + nums[i] >= last) last = i;
return last == 0;
}
同樣貪心:維護當前層最遠可達 curEnd 和下一層最遠可達 farthest,遍歷時更新,到達 curEnd 時步數+1並更新 curEnd=farthest。