leetcode hot 100 55 跳躍遊戲

2022-03-29 09:27:35 字數 1302 閱讀 6128

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。

陣列中的每個元素代表你在該位置可以跳躍的最大長度

判斷你是否能夠到達最後乙個位置。

示例 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, 所以根本不會執行到最後一行

1

class

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 ...