最小步數移動到數組末尾:
給定一個數組,裏面全是正整數。數字大小表示這一步最多可以向後移動幾個節點。
總是從數組第一個元素開始移動。問如何移動,可以以最少步數移動到最後一個節點。
例如:[3,4,2,1,3,1]初始狀態指向3表示下一步可以移動1格,或者2格,或者3格。
最優的方式是指向3的時候移動一步,第二次選擇移動4步,一共只需要兩步即可移動到數組尾。
public int minimumStepNumber1(int[] nums) {
//記錄步數
int step = 0;
//記錄本次移動了幾步
int temp = 0;
if (nums.length == 1) {
return 0;
}
if (nums[0] >= nums.length - 1) {
return step + 1;
}
for (int i = 0; i < nums.length; ) {
//記錄從當前位置經過兩次跳躍能達到的最大距離
int longestDistance = 0;
for (int j = 1; j <= nums[i]; j++) {
//判斷接下來一次跳躍能否到達最後一個點,能的話就返回 step+1
if (i + j >= nums.length - 1) {
return step + 1;
}
//判斷接下來兩次跳躍能否到達最後一個點,能的話就返回 step+2
if (i + j + nums[i + j] >= nums.length - 1) {
return step + 2;
}
if (j + nums[i + j] > longestDistance) {
longestDistance = j + nums[i + j];
temp = j;
}
}
i = i + temp;
step++;
}
return -1;
}