• [LeetCode] 45.跳跃游戏II


    Description

    给你一个非负整数数组 nums ,你最初位于数组的第一个位置。
    数组中的每个元素代表你在该位置可以跳跃的最大长度。
    你的目标是使用最少的跳跃次数到达数组的最后一个位置。
    假设你总是可以到达数组的最后一个位置。

    Example

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

    Analysis

    下标0能到达下标1下标2,选择跳到其中最大的,即下标1,这样接下来会有更多选择的空间。
    下标1能到达下标2下标3下标4,依然选择跳到其中最大的。
    对于一个点i,尝试更新所能到达的最远距离maxDist,用border记录上一个点的边界,如果当前点到达了border,更新maxDist,跳跃步数加1
    在下标i所能到达的所有点j中,nums[j] + [j]最大的那个一定会更新maxDist,更新border所用的maxDist就是nums[j] + [j]最大的那个

    Code

    class Solution {
    public:
        int jump(vector<int>& nums) {
            int border = 0, maxDist = 0, ans = 0;
            for(int i = 0;i < nums.size()-1;i++) {
                maxDist = max(maxDist, i + nums[i]);
                if(i == border) {
                    border = maxDist;
                    ans++;
                }
            }
            return ans;
        }
    };
    
  • 相关阅读:
    每日日报8月12日
    每日日报8月15日
    每日日报8月18日
    每日日报8月9日
    九月29号——动手又动脑
    今日总结
    每周总结
    今日总结
    周总结
    今日总结
  • 原文地址:https://www.cnblogs.com/Zforw/p/16342031.html
Copyright © 2020-2023  润新知