演算法練習(18):Jump Game
阿新 • • 發佈:2019-01-02
題目:題意就是說從下標0的位置能否到達最後一個下標的位置,然後陣列的每個值代表當前位置能向前走的最大步數。
分析與思路:我用貪婪演算法來做的,我遍歷每一個下標的值同時更新最遠到達的下標值(far),最後若far>=A.length()-1則說明可以到達。
程式碼:
class Solution { public: bool canJump(vector<int>& nums) { int far = 0; for (int i = 0; i < nums.size() && i <= far; i++) { if (i + nums[i] > far) far = i + nums[i]; }//更新far return far >= nums.size() - 1; } };
另一種思路:從左到右遍歷的時候把能到達的index都標true,最後檢視flag[size-1]是否為true即可。
程式碼:
class Solution { public: bool canJump(vector<int>& nums) { vector<int> flag(nums.size(), false); flag[0] = true; for (int i = 0; i < nums.size() - 1; i++) { if (flag[i]) { if (nums[i] + i < nums.size()) { for (int j = i; j <= nums[i] + i; j++) { flag[j] = true; } } else return true; } } return flag[nums.size() - 1]; } };