zoukankan      html  css  js  c++  java
  • 【LeetCode-贪心】跳跃游戏 II

    题目描述

    给定一个非负整数数组,你最初位于数组的第一个位置。

    数组中的每个元素代表你在该位置可以跳跃的最大长度。

    你的目标是使用最少的跳跃次数到达数组的最后一个位置。

    示例:

    输入: [2,3,1,1,4]
    输出: 2
    解释: 跳到最后一个位置的最小跳跃数是 2。
         从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
    

    说明: 假设你总是可以到达数组的最后一个位置。
    题目链接: https://leetcode-cn.com/problems/jump-game-ii/

    思路

    假设当前能起跳的范围为 [left, right),left 初始化为 0, right 初始化为 1,当前已经跳了 steps 步。则我们在 [left, right) 范围内起跳,记录能跳到的最远距离 rightMost,然后将 left 更新为 right+1,right 更新为 rightMost,并且 steps++。

    图来自这篇题解

    代码如下:
    [left, right) 范围内起跳:

    class Solution {
    public:
        int jump(vector<int>& nums) {
            int left = 0;
            int right = 1;
            int steps = 0;
            while(right<nums.size()){ // 因为起跳范围不包括right,所以是right<nums.size()
                int rightMost = left;
                for(int i=left; i<right; i++){
                    rightMost = max(rightMost, i+nums[i]);
                }
                left = right;
                right = rightMost+1;  // 是 rightMost+1,不是 rightMost
                steps++;
            }
            return steps;
        }
    };
    

    也可以在[left, right]范围内起跳:

    class Solution {
    public:
        int jump(vector<int>& nums) {
            int left = 0;
            int right = 0;
            int steps = 0;
            while(right<nums.size()-1){
                int rightMost = 0;
                for(int i=left; i<=right; i++){
                    rightMost = max(rightMost, i+nums[i]);
                }
                left = right+1;
                right = rightMost;
                steps++;
            }
            return steps;
        }
    };
    
    • 时间复杂度:O(n^2)
    • 空间复杂度:O(1)

    参考

    https://leetcode-cn.com/problems/jump-game-ii/solution/45-by-ikaruga/

  • 相关阅读:
    FirstAFNetWorking
    JSONModel 简单例子
    KVO
    KVC
    关于UITableView的性能优化(历上最全面的优化分析)
    浅拷贝和深拷贝
    UI2_异步下载
    UI2_同步下载
    算法图解学习笔记02:递归和栈
    算法图解学习笔记01:二分查找&大O表示法
  • 原文地址:https://www.cnblogs.com/flix/p/13542008.html
Copyright © 2011-2022 走看看