1. 程式人生 > >跳躍遊戲II

跳躍遊戲II

給出一個非負整數陣列,你最初定位在陣列的第一個位置。
陣列中的每個元素代表你在那個位置可以跳躍的最大長度。   
你的目標是使用最少的跳躍次數到達陣列的最後一個位置。
樣例

給出陣列A = [2,3,1,1,4],最少到達陣列最後一個位置的跳躍次數是2(從陣列下標0跳一步到陣列下標1,然後跳3步到陣列的最後一個位置,一共跳躍2次)

import java.util.Scanner;

/**
 * 給出一個非負整數陣列,你最初定位在陣列的第一個位置。
陣列中的每個元素代表你在那個位置可以跳躍的最大長度。   
你的目標是使用最少的跳躍次數到達陣列的最後一個位置。
樣例
給出陣列A = [2,3,1,1,4],最少到達陣列最後一個位置的跳躍次數是2(從陣列下標0跳一步到陣列下標1,然後跳3步到陣列的最後一個位置,一共跳躍2次)
 * @author Dell
 *
 */
public class Test117 {
    public static int jump(int[] A)
    {   
    	int jumps=0;
    	int reach=A[0];
	     int i=0;
      while(reach<A.length-1)
      {
    	int start=i;                       
    	int end=reach;
    	int temp=reach+1;
    	for(int k=start;k<=end;k++)
    	{    
    	      if(k+A[k]>reach)
    	      { 
    	    	 reach=k+A[k];     //每步前進的地方是下一步能達到的最遠的地方。
    	        // i=k;
    	      }
    	}
    	start=temp;
    	jumps++; 
      }
	     
	    return jumps+1;     
    }
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int[] a=new int[n];
		for(int i=0;i<n;i++)
		{
			a[i]=sc.nextInt();	
		}
        System.out.println(jump(a));
	}

}