55,跳躍遊戲
給定一個非負整數陣列,你最初位於陣列的第一個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最後一個位置。
示例 1:
輸入: [2,3,1,1,4] 輸出: true 解釋: 從位置 0 到 1 跳 1 步, 然後跳 3 步到達最後一個位置。
示例 2:
輸入: [3,2,1,0,4] 輸出: false 解釋: 無論怎樣,你總會到達索引為 3 的位置。但該位置的最大跳躍長度是 0 , 所以你永遠不可能到達最後一個位置。
貪婪演算法,因為我們並不是很關心每一個位置上的剩餘步數,我們只希望知道能否到達末尾,也就是說我們只對最遠能到達的位置感興趣,所以我們維護一個變數reach,表示最遠能到達的位置,初始化為0。遍歷陣列中每一個數字,如果當前座標大於reach或者reach已經抵達最後一個位置則跳出迴圈,否則就更新reach的值為其和i + nums[i]中的較大值,其中i + nums[i]表示當前位置能到達的最大位置
class Solution {
public boolean canJump(int[] nums) {
int n = nums.length, reach = 0;
for (int i = 0; i < n; ++i) {
if (i > reach || reach >= n - 1) break;
reach = Math.max(reach, i + nums[i]);
}
return reach >= n - 1;
}
}