目录
- 1- 思路
- 覆盖范围
- 2- 实现
- ⭐45. 跳跃游戏 II——题解思路
- 3- ACM 实现
- 原题链接:45. 跳跃游戏 II
1- 思路
覆盖范围
int cur = 0
:记录当前的覆盖范围int next = 0
:记录当前结点最远的跳跃距离int res = 0
:记录具体跳几步
覆盖范围更新:
- 1- 如果
i == cur
也就是说当前结点i
的下标等于cur
,i 已经到达了覆盖范围能跳的最远距离,则需要进行下一跳- 下一跳之前,要判断是否到达终点
- 若未到达终点,则进行下一跳
2- 实现
⭐45. 跳跃游戏 II——题解思路
class Solution {
public int jump(int[] nums) {
int curCover = 0;
int nextCover = 0;
int res = 0;
for(int i = 0 ; i< nums.length;i++){
nextCover = Math.max(nextCover,i+nums[i]);
if(curCover == i){
if(i != nums.length-1){
res++;
curCover = nextCover;
}
}
}
return res;
}
}
3- ACM 实现
public class jump2 {
public static int jump2(int[] nums){
int curCover = 0;
int nextCover = 0;
int res =0;
for(int i = 0 ; i < nums.length;i++){
nextCover = Math.max(nextCover,i+nums[i]);
if(i == curCover){
if(i != nums.length-1){
curCover = nextCover;
res++;
}
}
}
return res;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String[] parts = input.split(" ");
int[] nums = new int[parts.length];
for(int i = 0 ; i < parts.length;i++){
nums[i] = Integer.parseInt(parts[i]);
}
System.out.println("结果是"+jump2(nums));
}
}