Lintcode 117. 跳躍遊戲 II
阿新 • • 發佈:2018-11-04
給出一個非負整數陣列,你最初定位在陣列的第一個位置。
陣列中的每個元素代表你在那個位置可以跳躍的最大長度。
你的目標是使用最少的跳躍次數到達陣列的最後一個位置。
public int jump(int[] A) { int count = 0; int maxPos = 0; int lastMaxPos = -1; for (int i = 0; i < A.length && maxPos < A.length; i++) { if (i + A[i] >= A.length-1){ count++; if (i < maxPos) count++; break; } if (i == lastMaxPos){ count+=2; } if (maxPos <= i+A[i]){ lastMaxPos = maxPos; maxPos = i+A[i]; } } return count; }
自己的解法非常醜陋並且可讀性極差
dalao解法:
public int jump2(int[] A) { // write your code here if (A == null || A.length == 0) { return -1; } int start = 0, end = 0, jumps = 0; while (end < A.length - 1) { jumps++; int farthest = end; for (int i = start; i <= end; i++) { farthest = Math.max(farthest, A[i] + i); } start = end + 1; end = farthest; } return jumps; }
summary:在jump1的基礎上,每個階段的開始總是在前一階段的結尾的基礎上進行