45. 跳跃游戏 II

以最小的步数增加最大的覆盖范围,直到覆盖范围覆盖了终点
在cover范围内进行遍历,每次遍历完当前覆盖范围后步数加一
当下一步覆盖范围到达终点说明能走完,退出循环
image.png

  1. class Solution {
  2. public:
  3. int jump(vector<int>& nums) {
  4. if(nums.size()==1)return 0;
  5. int cover = 0; //当前元素能覆盖的最远距离
  6. int result = 0;
  7. int nextcover = 0;//下一元素能覆盖的最远距离
  8. for(int i=0;i<=cover;i++)
  9. {
  10. //在一个cover内记录下一个最远覆盖距离
  11. nextcover = max(nextcover,i+nums[i]);
  12. //当遍历完当前cover后,进行处理
  13. if(i==cover)
  14. {
  15. //
  16. if(cover!=nums.size()-1)
  17. {
  18. result++;
  19. cover = nextcover;
  20. if(cover>=nums.size()-1)break;
  21. }
  22. else break;
  23. }
  24. }
  25. return result;
  26. }
  27. };