这段代码优化了很久从之前的400ms,到了13ms,加了个max,具体看注释,我总觉得这是动态规划。
public class Solution {
public int jump(int[] nums) {
int[]dp =new int[nums.length];
dp[0] = 1;
int max=0;
for(int j=1;j<nums.length;j++){
dp[j] = Integer.MAX_VALUE;
}
for(int i=0;i<nums.length;i++){
if(i+nums[i]>=nums.length-1){//这个是我为了优化写的
dp[nums.length-1] = Math.min(dp[i]+1,dp[nums.length-1]);
return dp[nums.length-1]-1;
}else{
for(int j=max;j<=i+nums[i]&&j<nums.length;j++){//为了让他不用重复扫描,只要前面的数能到一次,他就是最少的次数;如果i变了,再从i到j,大部分都重复了,于是用了max,这是时间的大头。
if(dp[j]!=Integer.MAX_VALUE)continue;
dp[j] = Math.min(dp[i]+1,dp[j]);
}
max = i+nums[i];
}
}
return dp[nums.length-1]-1;
}
}
本文介绍了一种优化后的跳跃算法实现,通过动态规划思想将执行时间从400ms降低至13ms。文中详细展示了代码逻辑及关键优化点,如使用最大可达距离减少重复计算。

被折叠的 条评论
为什么被折叠?



