題目:給定一個非負整數數組废菱,你最初位于數組的第一個位置。數組中的每個元素代表你在該位置可以跳躍的最大長度抖誉。判斷你是否能夠到達最后一個位置殊轴。
第一印象
第一個感覺是動態(tài)規(guī)劃,覺得可以用當前位置所能達到的最遠距離來判斷袒炉,只要這個最遠距離大于最后一個位置的坐標旁理,那就一定可以到達,反之亦然我磁。時間復雜度O(N)孽文,空間復雜度O(1)。
代碼
public boolean canJump(int[] nums) {
int len = nums.length;
int max = nums[0];
for(int i = 0; i <= max; i ++) {
if(nums[i] + i > max)
max = nums[i] + i;
if(max >= len - 1)
return true;
}
return false;
}
代碼相當簡潔十性,結果跑出來時間復雜度和空間復雜度居然都不是最優(yōu)的一檔叛溢,我藍步蘆表示不服QAQ,一定是Java語言的問題劲适!
打開官解,果然是我這種做法厢蒜,不過這家貪心算法哈哈哈哈哈哈霞势,手動尷尬(─.─|||
也對哦,畢竟沒有用數組維護各個位置的狀態(tài)斑鸦,僅維持可達最遠的距離愕贡。
就醬紫。