[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;

    }

};

  

你可能感兴趣的:(LeetCode)