45. Jump Game II
仅供自己学习
思路:
贪心,每次从该位置 i 都选择能到达的位置之中选择最大的可以跳到的位置并且如果从这个位置跳的最大位置要大于 i 这个位置能跳到位置更大,就更新能跳到的位置。即使达到i最大能跳的位置了,最大跳数还是会更新,因为跳到的地方为 i+nums[i]。我们用一个end来记录一次i位置能跳到的最远距离,如果 i ==end,说明必按照最大跳数跳了一次,那么就计数一次,满足贪心。
代码:
1 class Solution { 2 public: 3 int jump(vector<int>& nums) { 4 int maxpos=0,end=0,jumpnums=0,n=nums.size(); 5 for(int i=0;i<n-1;++i){ //题目意思一定会有到最后一位的结果,那么只要到n-1的位置即可 6 if(maxpos>=i){//只要当前能达到的最远位置仍然比当前遍历到的位置大,说明能到达遍历到的这个位置 7 maxpos=max(maxpos,i+nums[i]);//更新能达到最大的位置 8 if(end==i){ //说明必跳了一次 9 end=maxpos; 10 jumpnums++; 11 } 12 } 13 } 14 return jumpnums; 15 } 16 };