1. 程式人生 > >計蒜客--第20題:跳躍遊戲二

計蒜客--第20題:跳躍遊戲二

第20題:跳躍遊戲二

時間限制 1000 ms 記憶體限制 10000 K
給定一個非負整數陣列,假定你的初始位置為陣列第一個下標。

陣列中的每個元素代表你在那個位置能夠跳躍的最大長度。

你的目標是到達最後一個下標,並且使用最少的跳躍次數。

例如:

A = [2,3,1,1,4], 到達最後一個下標的最少跳躍次數為2.(先跳躍1步,從下標0到1,然後跳躍3步,到達最後一個下標。一共兩次)

格式:

第一行輸入一個正整數n,接下來的一行,輸入陣列A[n]。

最後輸出最少的跳躍次數。

樣例輸入

5
3 1 1 1 1

樣例輸出

2

import java.util.Scanner;

public
class Main { /** * @param args */ static int minSteps(int[] A, int n) { int jumps = 0, step = 0, flag = 0; for (int i = 0; i <= n; jumps++, step = flag) { while (i <= step) { flag = Math.max(A[i] + i, flag); if (flag >= n - 1
) { return jumps + (n <= 1 ? 0 : 1); } i++; } } return n <= 1 ? 0 : 1; } public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan = new Scanner(System.in); int
n = scan.nextInt(); int[] A = new int[n]; for (int i = 0; i < n; i++) { A[i] = scan.nextInt(); } System.out.println(minSteps(A, n)); } }