45. 跳跃游戏 II

参考45. 跳跃游戏 II

题目

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

每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:0 <= j <= nums[i],i + j < n.
返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]

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

解题思路

  • 动态规划:考虑动态规划求最小次数,子问题为到达前一个位置的最小次数。

动态规划

class Solution {
    public int jump(int[] nums) {
        //考虑动态规划dp[i]表示到i位置最小跳跃次数
        int n = nums.length;
        int[] dp = new int[n];
        for(int i = 1; i < n; i++) {
            dp[i] = i;//Integer.MAX_VALUE;
            //遍历上次可能的位置获取最小次数
            for(int j = i-1; j < i && j >= 0; j--) {
                if(j + nums[j] >= i) dp[i] = Math.min(dp[i],dp[j]);
            }
            dp[i]++;
        }
        return dp[n - 1];
    }
}

复杂度分析

  • 时间复杂度:O(n^2),双重循环遍历。
  • 空间复杂度:O(n)dp数组空间n
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容