【leetCode】45_跳躍遊戲2
阿新 • • 發佈:2018-12-14
思路:
一句話的話就是,我們現在站在pos點,下一個我們到達的點是next_pos,這個點是怎麼選出來的呢?
next_pos是,(pos走一步能到達的點再往前走一步能走到最遠)的pos走一步能到達的點。這種點可能不止一個,我選擇的是距離pos最遠的點,但我覺得哪一個都可以。
pos是當前點,記集合S為 ,即pos能到達的點的集合。
我們的下一個起點為next_pos,
裡邊的max是得到了S裡的點再走一步能到達的最遠的位置,t是這些能到達這個最遠位置的S的子集,從這個子集中選擇一個最大的。
class Solution { public: int jump(vector<int>& nums) { int count = 0; if (nums.size() == 0) return 0; for (int i = 0; i < nums.size() - 1;){ if (nums[i] + i >= nums.size() - 1){ count += 1; return count; } int imax = -1; int next_pos = -1; for (int j = 1; j <= nums[i] && i + j < nums.size(); j ++){ if (i + j + nums[i + j] > imax){ next_pos = i + j; imax = i + j + nums[i + j]; } } count ++; i = next_pos; } return count; } };