45. 跳躍遊戲 II
阿新 • • 發佈:2022-04-03
✅做題思路or感想
這一題的主要思路是利用最大可移動距離來解題,而不是模擬一個小人一步步往前跳
多的不說了,全在程式碼裡了
class Solution { public: int jump(vector<int>& nums) { if (nums.size() == 1)return 0; //防止奇怪的測試用例 //cover代表的是在當前位置上走一步的最大可移動距離 //maxCover代表的是在當前位置上走兩步的最大可移動距離 int cover = 0, maxCover = 0; int step = 0; //記錄步數 //i代表的是在可移動範圍內的遍歷 for (int i = 0; i <= cover; i++) { //時刻更新下一步能最多走多遠 maxCover = max(maxCover, nums[i] + i); //如果i能到達nums.size() - 1,說明這一步的最大可移動距離已經覆蓋到了終點,可以停手了 if (i == nums.size() - 1)break; //如果沒有到終點,並且還走到了當前的最大可移動距離的盡頭 //則要支付出一個步數,來拓展最大可移動距離! if (i == cover) { cover = maxCover; step++; } } return step; } };