LeetCode45: Jump Game II

225 阅读1分钟

思路:

每次其实是跳一个区间,即下一个可到达的区间是上一个可到达区间内的点可跳的最远的点,用公式表达即是:

R_i+1 = Max(L_i+nums[L_i], L_i+1+nums[L_i+1], ..., R_i + nums[R_i])L_i+1 = R_iL_0 = R_0 = 0

往往思路会局限于点到点之间的跳跃

java代码:

class Solution {
    public int jump(int[] nums) {
        int left, right, index;
        left = right = index = 0;
        int n = nums.length;
        while (right < n-1) {
            index++;
            int rmax = left+nums[left];
            for (int i = left+1; i <= right; i++) {
                rmax = Math.max(rmax, i+nums[i]);
            }
            left = right;
            right = rmax;
        }
        return index;
    }
}