zoukankan      html  css  js  c++  java
  • [leetcode] Jump Game II

    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 is2. (Jump1step from index 0 to 1, then3steps to the last index.)

    https://oj.leetcode.com/problems/jump-game-ii/

    思路1:先想到了DP,从后向前推,当前位置最小步数取决于其所能到达范围内最小的步数,所以需要遍历其覆盖范围,复杂度略高,不是O(n)的算法,目测超时。

    思路2:贪心。维护几个变量,curReach,nextReach,每次在curReach的范围内更新nextReach,直到curReach覆盖到结尾。

    public class Solution {
    	public int jump(int[] A) {
    		if (A == null || A.length < 2)
    			return 0;
    		int n = A.length;
    		int step = 0;
    		int curReach = 0;
    		int nextReach = 0;
    		int i;
    		for (i = 0; i < n;) {
    
    			if (curReach >= n - 1)
    				break;
    
    			while (i <= curReach) {
    				nextReach = nextReach > (i + A[i]) ? nextReach : (i + A[i]);
    				i++;
    			}
    			curReach = nextReach;
    
    			step++;
    		}
    
    		return step;
    	}
    
    	public static void main(String[] args) {
    		System.out.println(new Solution()
    				.jump(new int[] { 2, 3, 1, 1, 1, 2, 3 }));
    	}
    
    }

    第二遍记录:

    每次在curReach内遍历元素,计算下一步可以到达的nextReach,当curReach覆盖n-1时结束。

    public class Solution {
        public int jump(int[] A) {
            int n = A.length;
            int curReach=0;
            int nextReach=0;
            int count=0;
            for(int i=0;i<n;){
                if(curReach>=n-1)
                    return count;
                while(i<=curReach){
                    nextReach=Math.max(nextReach,i+A[i]);
                    i++;
                }
                count++;
                curReach=nextReach;
            }
            return count;
        }
    }

    参考:

    http://www.cnblogs.com/lichen782/p/leetcode_Jump_Game_II.html

    http://blog.csdn.net/havenoidea/article/details/11853301

  • 相关阅读:
    双反斜杠引发的正则表达式错误
    表单验证的前端验证后端验证
    html中的select下拉框
    hibernate需要注意的点
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3810757.html
Copyright © 2011-2022 走看看