时间复杂度:O(n),其中 n 是数组长度。
空间复杂度:O(1)。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 最少需要跳跃几次能跳到末尾
* @param n int整型 数组A的长度
* @param A int整型一维数组 数组A
* @return int整型
*/
public int Jump (int n, int[] A) {
// write code here
int end = 0; // 记录边界
int maxposition = 0; // 记录最大的位置 也即下次的边界;
int count = 0; // 记录走过的步数
for(int i = 0; i < n-1; i++) {
maxposition = Math.max(maxposition ,i + A[i]);
if(i == end){ // 当走到边界的时候,就要更新边界为可达的最远位置
end = maxposition;
count++; // 当走到边界的时候就要更新步数了
}
}
return count;
}
}o(n2) o(n)
class Solution {
public int jump(int[] nums) {
int len = nums.length;
// if(len == 1){ return true ; }
int[] dp = new int[len];
Arrays.fill(dp,Integer.MAX_VALUE);
dp[0] = 0;
for(int i = 0;i < len;i++){
int max = i + nums[i];
for(int j = i+1; j <= max && j < len; j++){
dp[j] = Math.min(dp[j],dp[i]+1);
}
}
return dp[len-1];
}
}
京公网安备 11010502036488号