45 jump-game-ii
阿新 • • 發佈:2018-11-08
這道題目和以前一道能不能跳到最後一點的題目有比較類似的思路,但是要稍微難一點,因為要求出最小的跳數。
題目的大體意思是這樣的,給定一個一維陣列,陣列中每一位上的數字表示從該位置能向後一跳的最遠距離是多少(之所以說最遠是可以在0~最遠值之間任意選擇一個合適的數值),問到達最後一個位置所經歷的最小跳數。這種題目基本上窮舉是肯定不行的,因此,要有一些小的處理技巧。另外,值得注意的是,這道題給出的所有測試用例沒有不能到達的情況。
要知道哪種方案跳數最低,在未能到達最後一個位置之前,必須要對所有點進行遍歷,來檢視所有可能的情況,從而選擇最優。
從出發位置開始,設定一個變數每次迴圈都記錄從該位置能到達的最遠位置是多少,該變數用來表示我們下一次迴圈都有哪些新的點可以遍歷到,然後繼續往後遍歷,直到到達最後一點為止。
理論講起來比較費解,但是程式碼很簡單,只要55題做了,這道題不難理解
class Solution { public: int jump(vector<int>& nums) { int minstep = 0; int cur = 0, i = 0, maxsize = 0; while (cur < nums.size()-1) { ++minstep; maxsize = cur; for (; i<=maxsize; ++i) { cur = max(cur, i+nums[i]); } } return minstep; } };