class Solution {
//贪心思路:局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一
// 整体最优:一步尽可能多走,从而达到最小步数
public int jump(int[] nums) {
int n = nums.length;
if (n <= 1) return 0;
int ans = 0;
//当前的最远距离
int curDistance = 0;
//下一步的最远距离
int nextDistance = 0;
for (int i = 0; i < n; i++) {
//更新下一步的最远距离
nextDistance = Math.max(nextDistance, i + nums[i]);
//走到当前的最远距离
if (i == curDistance) {
//还没有到达终点
if (i < n - 1) {
//需要走下一步
ans++;
//更新当前的最远距离
curDistance = nextDistance;
//此时已经走了下一步,
//如果下一步的最远距离大于终点,结束循环
if (nextDistance >= n - 1) break;
} else {
break;
}
}
}
return ans;
}
}
class Solution {
public int jump(int[] nums) {
int n = nums.length;
if (n <= 1) return 0;
int ans = 0;
int curDistance = 0;
int nextDistance = 0;
for (int i = 0; i < n; i++) {
nextDistance = Math.max(nextDistance, i + nums[i]);
if (nextDistance >= n - 1) return ans + 1;
if (i == curDistance) {
ans++;
curDistance = nextDistance;
}
}
return ans;
}
}
方法:贪心class Solution { //贪心思路:局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一 // 整体最优:一步尽可能多走,从而达到最小步数 public int jump(int[] nums) { int n = nums.length; if (n <= 1) return 0; int ans = 0; //当前的最远距离 int c...