給定乙個非負整數陣列,你最初位於陣列的第乙個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最後乙個位置。
示例 1:
輸入: [2,3,1,1,4]輸出:
true
解釋: 我們可以先跳
1 步,從位置 0 到達 位置 1, 然後再從位置 1 跳 3 步到達最後乙個位置。
示例 2:
輸入: [3,2,1,0,4]輸出:
false
解釋: 無論怎樣,你總會到達索引為
3 的位置。但該位置的最大跳躍長度是 0 , 所以你永遠不可能到達最後乙個位置。
從第乙個元素開始,每次最大可以跳當前元素值的格仔數,也就是可以到達i, i +1, ... , i + nums[i], 判斷最終是否能到達最後乙個位置。
思路參考:
維護乙個rightmost變數,這個變數記錄了當前能到達的最右邊的位置下標,遍歷陣列:
如果當前下標大於rightmost,說明不可達當前位置,直接返回false,因為如果 當前位置都不可達,那更不可能到達最後乙個位置;
如果rihgtmost大於等於陣列長度減一,直接返回true;
如果 i + nums[i] 大於 rightmost, 則更新rightmost變數的值,
迴圈結束後返回true 或者false都沒有關係,因為無論是否能達到最後乙個位置,在迴圈內部都會得出結果然後直接返回 true或者 fasle, 所以根本不會執行到最後一行
1class
solution
12//
如果rihgtmost大於等於陣列長度減一,直接返回true
13if(rightmost >= len - 1)16
17//
更新rightmost
18 rightmost = math.max(rightmost, nums[i] +i);19}
20//
迴圈結束返回true或者false都可以,因為根本不會執行到這裡
21return
true;22
}23 }
leetcode 執行用時:2 ms > 81.46%, 記憶體消耗:40.7 mb > 61.24%
時間複雜度:o(n)。很明顯只有乙個迴圈,所以最壞時間複雜度為o(n)。
空間複雜度:o(1)。只需要常數個變數的空間。
leetcode hot 100 56 合併區間
給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 intervals 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 intervals 1,4 4,5 輸出 1,5 解釋 區間 1,4 和...
leetcode hot 100 56 合併區間
給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 intervals 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 intervals 1,4 4,5 輸出 1,5 解釋 區間 1,4 和...
leetcode hot100 1 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...