Sunday, May 25, 2014

Jump Game II - LeetCode

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.)
-----
It is easy to thought using DP to solve this problem. However, there is some generous guy find a easy solution. (You should convince yourself that there always exits someone smarter than you, haha).

public class Solution {
    int jump(int A[], int n) {
        int numJump = 0;
        int lastLongestDisCanBeCover = 0;
        int currLongestDisCanBeCover = 0;
        for (int i = 0; i < n; ++i) {
            if (i > lastLongestDisCanBeCover) {
                lastLongestDisCanBeCover = currLongestDisCanBeCover;
                ++ numJump;
            }
            currLongestDisCanBeCover = max(currLongestDisCanBeCover, i+A[i]);
        }
        return numJump;
    }
};

The basic idea with this algorithm is scan the array and find every element the longest distances they can reach.