[leetcode]Jump Game II
简单题。
public class Solution { public int jump(int[] A) { // Start typing your Java solution below // DO NOT write main() function int len = A.length; if (len == 0 || len == 1) return 0; int[] m = new int[len]; m[0] = 0; int max = 0; int last = -1; for (int i = 0; i < len; i++) { if (i + A[i] > max) { last = max; max = i + A[i]; for (int j = last+1; j <= max && j < len; j++) { m[j] = m[i] + 1; } } if (max >= len - 1) return m[len-1]; } return m[len-1]; } }
从参考的答案来看,确实可以省却m数组的:
/* * We use "last" to keep track of the maximum distance that has been reached * by using the minimum steps "ret", whereas "curr" is the maximum distance * that can be reached by using "ret+1" steps. Thus, * curr = max(i+A[i]) where 0 <= i <= last. */ class Solution { public: int jump(int A[], int n) { int ret = 0; int last = 0; int curr = 0; for (int i = 0; i < n; ++i) { if (i > last) { last = curr; ++ret; } curr = max(curr, i+A[i]); } return ret; } };