首页 > 其他分享 >力扣 leetcode 45. 跳跃游戏 II

力扣 leetcode 45. 跳跃游戏 II

时间:2022-11-29 20:55:05浏览次数:35  
标签:力扣 位置 nums int max 45 II 次数 跳跃

问题描述

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

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

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

假设你总是可以到达数组的最后一个位置。

提示:

  • 1 <= nums.length <= 10^4
  • 0 <= nums[i] <= 1000

示例

示例 1:

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

示例 2:

输入: nums = [2,3,0,1,4]
输出: 2

解题思路

这里我们可以从起始位置出发,根据当前可跳跃次数,来更新后面位置的最少跳跃次数。如果后面某个位置 j 是由当前位置 i 跳跃过去的,即当前位置最少需要跳跃 x 次,则判断 x+1 是否小于 i 的最小跳跃次数,如果小于,则更新它的值。

但是这样做存在大量重复遍历的节点,例如 nums=[5,1,1,1,1,1,1] ,在这里,我们从 0 开始跳跃两步即可抵达终点,按我们之前的方法却要遍历多 1, 2, 3, 4 这四个位置。因此,我们可以记录一下上一轮最远的跳跃位置,如果当前位置跳跃无法跳出上一轮的最远位置,就不需要再考虑这个位置了(因为跳跃次数一定比上一次的跳跃次数多)。

同时,在这种情况下,我们发现,每次更新最少跳跃次数,更新值都不超过上一次的更新值。这对我们有两个帮助:1,只要我们从某个点出发,最远跳跃位置达到了末尾,则可以终止判断了,已经找出了最少跳跃次数;2,每次更新最少跳跃次数时,我们无需与上一次保存的值进行比较。

最终的代码如下:

class Solution {
public:
    int jump(vector<int>& nums) {
        vector<int> dp(nums.size(), 0x7ffffff);
        int tmp;
        int pre_max = 0;
        int max = 0;
        int max_idx = nums.size() - 1;
        dp[0] = 0;
        for(int i = 0; i < nums.size(); i++){
            if(i + nums[i] < max){
                continue;
            }
            else{
                pre_max = max;
                max = (i + nums[i]) < nums.size() ? (i + nums[i]) : (max_idx) ;
            }
            if(pre_max == max_idx){
                break;
            }
            tmp = dp[i] + 1;
            for(int j = pre_max + 1; j <= max; j++){
                dp[j] = tmp;
            }
        }
        return dp[max_idx];
    }
};

标签:力扣,位置,nums,int,max,45,II,次数,跳跃
From: https://www.cnblogs.com/greatestchen/p/16936660.html

相关文章

  • 力扣 leetcode 1758. 生成交替二进制字符串的最少操作数
    问题描述给你一个仅由字符'0'和'1'组成的字符串s。一步操作中,你可以将任一'0'变成'1',或者将'1'变成'0'。交替字符串定义为:如果字符串中不存在相邻两个字......
  • 力扣240(java&python)-搜索二维矩阵 II(中等)
    题目:编写一个高效的算法来搜索 m x n 矩阵matrix中的一个目标值target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例......
  • openssl 在线证书转换、IIS 导入证书
    这个转换出来的导入不到IIS里面,提示密码不对https://www.nethub.com.hk/tw/ssl-certificates/ssl-converter/在线证书转换这个转换的可以导入到IIShttps://www.cloudmax......
  • 螺旋矩阵II-LeetCode59 考验代码能力
    力扣链接:https://leetcode.cn/problems/spiral-matrix-ii/题目  给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 nxn 正方......
  • 云边缘网关TG453
    5G云边缘网关TG453,广泛应用于工控物联网等场景,具备组网、数据采集、协议解析、无线通信、远程控制能力。全网通5G网络,同时支持边缘计算,满足大接入量数据处理和及时反馈的低......
  • 力扣 leetcode 813. 最大平均值和的分组
    问题描述给定数组nums和一个整数k。我们将给定的数组nums分成最多k个相邻的非空子数组。分数由每个子数组内的平均值的总和构成。注意我们必须使用nums数......
  • 【算法训练营day18】LeetCode513. 找树左下角的值 LeetCode112. 路径总和 LeetCode113
    LeetCode513.找树左下角的值题目链接:513.找树左下角的值初次尝试后序递归法,传递一个容器保存当前节点的高度和当前节点为根的树左下角的值,递归单层逻辑是如果左子树节......
  • 力扣209(java&python)-长度最小的子数组(中等)
    题目:给定一个含有 n 个正整数的数组和一个正整数target。找出该数组中满足其和≥target的长度最小的连续子数组 [numsl,numsl+1,...,numsr-1,numsr],并返回......
  • 交换机的RJ45端口和SFP端口有什么区别?
    现如今,随着人们对网络需求的日益增长,数据中心或者服务器机房内的网络升级已经刻不容缓,因此,千兆以太网已经越来越普遍。众所周知,目前市场上大家使用的千兆以太网交换机一般有......
  • iis下发布 vue
    requestRouter_amd64.msi https://download.microsoft.com/download/E/9/8/E9849D6A-020E-47E4-9FD0-A023E99B54EB/requestRouter_amd64.msiurlrewrite2.exe https://......