[leetcode-45]Jump Game II(java)

问题描述:https://leetcode.com/problems/jump-game-ii/

分析:这道题最开始使用DP算法,发现TLE,然后归纳代码发现,没有必要分配额外的空间,而只需要保留一个空间的左边界和右边界即可。当这个右边界小于target时,从左边界遍历到右边界,查看这一轮里面右边界最多延伸到什么地方?当然,如果新的右边界小于等于原来的右边界,那么jump game就困死在了这一轮,反之,就开始下一轮,开始部分由end+1开始。
这种思想有些像BFS,不是嘛

代码如下:9ms

public class Solution {
    public int jump(int[] nums) {
        int level = 0;
        int start = 0,end = 0;
        int target = nums.length - 1;

        while(endint value = start;
            for(int i = start;i<=end;i++){
                value = Math.max(value,nums[i]+i);
            }
            if(value<=end)//never has chance to reach last
                return -1;

            start = end+1;
            end = value;
        }
        return level;
    } 
}

你可能感兴趣的:(leetcode)