站长工具 seo查询,网上推广app,微信公众号怎么创建优惠券,江苏省建设工程质量监督站网站文章目录 题目描述解题方法贪心java代码复杂度分析 题目描述
给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。
每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说#xff0c;如果你在 nums[i] 处#xff0c;你可以跳转到任意 nums[i j] 处:
0… 文章目录 题目描述解题方法贪心java代码复杂度分析 题目描述
给定一个长度为 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 1040 nums[i] 1000题目保证可以到达 nums[n-1]
解题方法
贪心
其实这道题思路不难我们只需要求出每一步能够到达的最远位置若某一步能够到达或者超过终点则返回最终步数。
那我们怎么求出每一步能够到达的最远位置呢下面我来简单说一下。
第一步我们在数组下标为0的位置我们可以到达的最远位置为nums[0]。第二步我们分别以数组下标 1 ~ nums[0]为起点计算以每个位置为起点时可以到达的最远位置。依次类推每一步我们以上一步的起点最远位置1 ~ 上一步可以到达的最远位置为起点计算可以到达的最远位置。直到到达或者超过终点返回最终步数。
不明白的童鞋可以结合上面说的具体思路看一下下方图示示例。
java代码
public int jump(int[] nums) {// 数组长度小于等于1时跳跃次数为0if(nums null || nums.length 1) {return 0;}// 当前步数可以到达的最远位置int end 0;// 当前步数 1 可以到达的最远位置int maxPosition end;// 当前位置int curPosition 0;// 跳跃次数int jumps 0;// 从当前位置 遍历 到达 当前步数可以到达的最远位置while(curPosition end) {// 当前步数 1 可以到达的最远位置 在 遍历的过程中不断更新maxPosition Math.max(maxPosition, nums[curPosition] curPosition);// 若maxPosition超过或等于数组最后一个元素的位置则返回jumps 1if(maxPosition nums.length - 1) {return jumps 1;}// 当当前位置 遍历到 当前步数可以到达的最远位置时跳跃次数 1, 当前步数可以到达的最远位置 更新为 当前步数 1 可以到达的最远位置, jumpsif(curPosition end) {jumps;end maxPosition;}curPosition;}return 0;
}复杂度分析
时间复杂度 O ( N ) O(N) O(N)需要遍历一次数组。 空间复杂度 O ( 1 ) O(1) O(1)只有常数级别的变量存储。 个人公众号 个人小游戏