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

  • 相关阅读:
    GDB编辑、搜索源码以及在线帮助
    GDB查看栈信息
    GDB信号处理
    GDB反向调试
    GDB调试多进程程序
    GDB后台调试命令
    GDB non-stop模式
    GDB调试多线程程序
    GDB禁用删除断点
    解决Mac OS下Eclipse、IntelliJ IDEA打开其他窗口默认全屏
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3810757.html
Copyright © 2011-2022 走看看