簽到題。算法
先吐槽一下,標的是困難題,但是感受難度還不若有些簡單題。。。不知道怎麼定的難度標準。數組
給定一個非負整數數組,你最初位於數組的第一個位置。code
數組中的每一個元素表明你在該位置能夠跳躍的最大長度。class
你的目標是使用最少的跳躍次數到達數組的最後一個位置。next
示例:static
輸入: [2,3,1,1,4]
輸出: 2
解釋: 跳到最後一個位置的最小跳躍數是 2。
從下標爲 0 跳到下標爲 1 的位置,跳 1 步,而後跳 3 步到達數組的最後一個位置。
說明:
di
假設你老是能夠到達數組的最後一個位置。while
個人思路:這個題第一感受就是貪心算法,這裏有一個地方值得注意:數組的元素是能夠跳躍的最大長度,而不是必須長度。這就說明我只要每次都找到當前下標下可跳到的幾個點他們哪一個能跳的最遠那我就去哪一個。co
代碼:return
public static int jump(int[] nums) { int jumpNum = 0;//返回值 int tempMax = 0;//當前位置下,我能跳到的這些點他們能跳的最遠的位置 int index = 0;//當前位置 int jumpLength = nums.length; if(jumpLength == 1){//只有一個長度的特殊狀況 return 0; } int nextIndex = 0; while(true){ if(index + nums[index] >= jumpLength -1){ jumpNum++; break; } for (int j = index + 1; j < index + nums[index] + 1; ++j) { if(j + nums[j] > tempMax){ tempMax = j + nums[j]; nextIndex = j; } } tempMax = 0; jumpNum ++; index = nextIndex; } return jumpNum; }