Java解决跳跃游戏2
01 题目
-
给定一个长度为
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]
02 知识点
- 贪心
- 循环
03 我的题解思路
public class jump {
public static void main(String[] args) {
// 测试数据
int[] nums= {7,0,9,6,9,6,1,7,9,0,1,2,9,0,3};
System.out.println(psv(nums));
}
public static int psv(int[] nums) {
int rs=0;//返回值
int n=nums.length;//数组长度
if(n==1) {//特殊情况,长度为1返回0
return 0;
}
int start=0;//每次移动前的起点
int end=0;//每次移动的最远距离
for (int i = 0; i < n-1; i++) {
end=Math.max(end, i+nums[i]);
if(i==start) {
// 每次移动到起点处,起点改变,为下一次移动的起点
// 返回值加一
start=end;
rs++;
}
}
return rs;
}
}