計蒜客--第20題:跳躍遊戲二
阿新 • • 發佈:2019-01-29
第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));
}
}