題目:
Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Your goal is to reach the last index in the minimum number of jumps.
For example:
Given array A = [2,3,1,1,4]
The minimum number of jumps to reach the last index is 2
. (Jump 1
step from index 0 to 1, then 3
steps to the last index.)
題解:
參考了http://blog.csdn.net/linhuanmars/article/details/21356187,這道題和Jump Game都是利用動態規劃的思想。區別是,上一道題維護的全域性最優是maxcover,一旦maxcover大於總長度,那麼說明能跳到結尾。
而這道題除了維護maxcover外,還需要考慮維護最小步數,最小步數的維護靠maxcover作為每一步能跳的長度,程式碼如下:
1 public int jump(int[] A) {
2 if(A==null||A.length==0)
3 return 0;
4
5 int maxcover = 0;
6 int step = 0;
7 int lastcover = 0;
8 for(int i = 0; i<=maxcover&&i<A.length;i++){
9 if(i>lastcover){
10 step++;
11 lastcover = maxcover;
12 }
13
14 if(A[i]+i>maxcover)
15 maxcover = A[i]+i;
16 }
17
18 if(maxcover<A.length-1)
19 return 0;
20 return step;
21 }
2 if(A==null||A.length==0)
3 return 0;
4
5 int maxcover = 0;
6 int step = 0;
7 int lastcover = 0;
8 for(int i = 0; i<=maxcover&&i<A.length;i++){
9 if(i>lastcover){
10 step++;
11 lastcover = maxcover;
12 }
13
14 if(A[i]+i>maxcover)
15 maxcover = A[i]+i;
16 }
17
18 if(maxcover<A.length-1)
19 return 0;
20 return step;
21 }