leetcode日記 45 跳躍遊戲

2021-10-05 17:41:05 字數 1291 閱讀 1020

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

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

你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。

示例:輸入: [2,3,1,1,4] 輸出: 2 解釋: 跳到最後乙個位置的最小跳躍數是 2。

從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步到達陣列的最後乙個位置。 說明:

假設你總是可以到達陣列的最後乙個位置。

動態規劃,記錄到某個位置的時候需要的最小步數。當能夠到達乙個新位置的時候比較(原來位置的步數+1)和(已經儲存的最小步數),記錄更新為更小的那個。

先嘗試最暴力的手段。

畢竟是困難難度的題目,果然沒有那麼簡單……

不得不說我的演算法在時間複雜度上確實存在很大的優化空間。既然是超時,那麼首先考慮演算法的優化問題。因為我現在對每乙個位置都需要進行多次更新,題目中又允許我們假定一定可以到最後一格,那麼我們是否可以用貪心演算法解決?每次我都盡可能地優先更新走的最遠的那個格仔,但是這樣有個問題就是可能需要回溯(相當於要進行深度優先的搜尋),那就需要記錄跳躍的路徑(當作回溯點),有沒有避免回溯的方法呢……我想到了一種演算法算是避免了回溯。

那就是貪心演算法:每一步都盡可能的往遠處走,我只需要記錄最遠那個格仔以及它對應的步數就可以了,這樣不但可以避免回溯,甚至可以在o(n)的條件下(而且最多遍歷一次)完成題目要求。只需要從左往右遍歷就可以。

如果採用從後往前遍歷的話很可能會漏過某些更快到達的途徑。

令人滿意。這題其實只能算中等難度吧。

Leetcode 45 跳躍遊戲

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。示例 輸入 2,3,1,1,4 輸出 2 解釋 跳到最後乙個位置的最小跳躍數是 2。從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步...

Leetcode 45 跳躍遊戲

貪心 由區域性最優匯出全域性最優。對於該點能跳到的所有點loc 1 nums loc 考慮跳到之後還能跳多遠k nums loc k 哪個點最遠就跳到哪。學習題解的寫法 貪心的思想不變 還是找目前最有利的選擇來構成全域性最佳!在每一跳內找下一次的最遠距離!maxpos為在考慮範圍內能找到的跳到的最遠...

leetcode 45 跳躍遊戲

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。示例 輸入 2,3,1,1,4 輸出 2 解釋 跳到最後乙個位置的最小跳躍數是 2。從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步...