首页 > 其他分享 >跳跃游戏 II

跳跃游戏 II

时间:2023-09-03 16:23:34浏览次数:31  
标签:下标 游戏 nums int II length 跳跃 dp

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。

每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

  • 0 <= j <= nums[i] 
  • i + j < n

返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。

 

示例 1:

输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。

     从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

示例 2:

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

 

提示:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 1000
  • 题目保证可以到达 nums[n-1]

思路

到达n-1的最小跳跃次数,有约束的最大或者最小考虑使用动态规划

1、定义最优解dp[i]:表示跳到第i个下标的位置时需要的最少次数

2、动态转移方程:

(1) 遍历计算过dp数组下标0到i-1

(2) dp[j]可以跳到dp[i]则:dp[i] = Math.min(dp[j] + 1, dp[i])

3、初始化

 

代码

 

class Solution {
    public int jump(int[] nums) {
        int[] dp = new int[nums.length];

        for (int i = 1; i < nums.length; i++) {
            dp[i] = Integer.MAX_VALUE;
            for (int j = 1; j < i; j++) {
                if (canJump(i - j, nums[j])){
                    dp[i] = Math.min(dp[j] + 1, dp[i]);
                }
            }
        }

        return dp[nums.length - 1];
    }

    private boolean canJump(int distance, int step) {
        return step >= distance;
    }
}

 

 

 

标签:下标,游戏,nums,int,II,length,跳跃,dp
From: https://www.cnblogs.com/Adam-Ye/p/17675108.html

相关文章

  • 代码随想录算法训练营第二十八天| 93.复原IP地址 78.子集 90.子集II
     93.复原IP地址    卡哥建议:本期本来是很有难度的,不过 大家做完 分割回文串 之后,本题就容易很多了   题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html   视频讲解:https://www.bilibili.com/video/BV1XP4......
  • 代码随想录算法训练营第二十七天| 39. 组合总和 40.组合总和II 131.分割回文串
      39. 组合总和    卡哥建议:本题是 集合里元素可以用无数次,那么和组合问题的差别 其实仅在于 startIndex上的控制   题目链接/文章讲解:https://programmercarl.com/0039.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8C.html   视频讲解:https://www.bilibili.com......
  • 剑指 Offer 57 - II. 和为s的连续正数序列(简单)
    题目:classSolution{public:vector<vector<int>>findContinuousSequence(inttarget){//本题使用滑动窗口(双指针)inti=1,j=1;//定义左右边界,一般是左闭右开intsum=0;//窗口内的和vector<vector<int>>result;whi......
  • 代码随想录算法训练营第二十五天| 216.组合总和III 17.电话号码的字母组合
     216.组合总和III    卡哥建议:如果把 组合问题理解了,本题就容易一些了。    题目链接/文章讲解:https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CIII.html   视频讲解:https://www.bilibili.com/video/BV1wg411873x  做题思路:......
  • IIR滤波器算法
    IIR(InfiniteImpulseResponse)滤波器是一类递归型数字滤波器,其输出信号不仅与当前的输入信号有关,还与之前的输入和输出信号有关。因此,IIR滤波器的阶数相对较低,可以实现更为复杂的频率响应。IIR滤波器的数学模型描述如下:其中,x(n)和y(n)分别表示输入信号和输出信号,bk和ak分别为前向系......
  • Leetcode 剑指 Offer 58 - II. 左旋转字符串(Zuo xuan zhuan zi fu chuan lcof)
    题目链接字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例1:输入:s="abcdefg",k=2输出:"cdefgab"示例2:输入:s=......
  • 如何使用iisreset命令重启IIS
    如何使用iisreset命令重启IIS 1、界面操作打开“控制面板”->“管理工具”->“服务”。找到“IISAdminService”右键点击“重新启动”弹出“停止其它服务”窗口,点击“是”。2、Net命令操作点击“开始”->“运行”,输入cmd打开命令窗口;输入netstopiisadmin /y 回......
  • Python进制转换以及ASCII码的转换
    获取ASCII码以及根据ASCII码获取内容#获取字符的编码为98#c的ASCII码为99print(ord('c'))#chr()根据编获取对应的值print(chr(99))进制的转换#hex函数十进制转十六进制print(f'99的十六进制{hex(99)}')#oct函数十进制转八进制print(f'99的八进制{oct(99)}')#......
  • 删列造序 II
    给定由n 个字符串组成的数组strs,其中每个字符串长度相等。选取一个删除索引序列,对于strs 中的每个字符串,删除对应每个索引处的字符。比如,有strs=["abcdef","uvwxyz"],删除索引序列 {0,2,3},删除后strs 为["bef","vyz"]。假设,我们选择了一组删除索引answer,那么在......
  • 剑指 Offer 14- II. 剪绳子 II(中等)
    题目:classSolution{//本题用贪心算法,拆成尽可能多的3且不可以出现长度为1的小段。用dp会溢出,放弃吧public:intcuttingRope(intn){if(n==2)return1;if(n==3)return2;if(n==4)return4;longlongres=1;......