給定乙個非負整數陣列,你最初位於陣列的第乙個位置。動態規劃,記錄到某個位置的時候需要的最小步數。當能夠到達乙個新位置的時候比較(原來位置的步數+1)和(已經儲存的最小步數),記錄更新為更小的那個。陣列中的每個元素代表你在該位置可以跳躍的最大長度。
你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。
示例:輸入: [2,3,1,1,4] 輸出: 2 解釋: 跳到最後乙個位置的最小跳躍數是 2。
從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步到達陣列的最後乙個位置。 說明:
假設你總是可以到達陣列的最後乙個位置。
先嘗試最暴力的手段。
畢竟是困難難度的題目,果然沒有那麼簡單……
不得不說我的演算法在時間複雜度上確實存在很大的優化空間。既然是超時,那麼首先考慮演算法的優化問題。因為我現在對每乙個位置都需要進行多次更新,題目中又允許我們假定一定可以到最後一格,那麼我們是否可以用貪心演算法解決?每次我都盡可能地優先更新走的最遠的那個格仔,但是這樣有個問題就是可能需要回溯(相當於要進行深度優先的搜尋),那就需要記錄跳躍的路徑(當作回溯點),有沒有避免回溯的方法呢……我想到了一種演算法算是避免了回溯。
那就是貪心演算法:每一步都盡可能的往遠處走,我只需要記錄最遠那個格仔以及它對應的步數就可以了,這樣不但可以避免回溯,甚至可以在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 步...