最小跳躍步

最小步數移動到數組末尾:
給定一個數組,裏面全是正整數。數字大小表示這一步最多可以向後移動幾個節點。
總是從數組第一個元素開始移動。問如何移動,可以以最少步數移動到最後一個節點。
例如:[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;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章