跳跃游戏

2019-06-24  本文已影响0人  Michaelhbjian

在跳跃游戏中,要明白贪心法则的定义。贪心法则:最基本的理解就是,每次选择当前最优的解,到最后就能得到整个问题的最优解法。

1.题目

给定数组arr,arr[i]=k代表可以从位置i向右跳1~k个距离。比如,arr[2] == 3,代表从位置2可以调到位置3、位置4或位置5。如果从位置0出发,返回最少跳几次能跳到arr最后的位置上。

2.举例

arr = {3,2,3,1,1,4}

arr[0]==3,选择跳到位置2:arr[2]==3,可以跳到最后的位置。所以返回2.

3.解题思路(利用贪心法则)

具体过程如下:

image.png

2.从左到右遍历arr,假设遍历到位置i。

3.当遍历到arr的尾部时,最终返回jump即可。

image.png

4.具体代码如下

/**
 * @author zhoujian123@hotmail.com 2018/8/15 15:53
 */
public class JumpGame {

    public static int jump(int [] arr){
        if (arr == null || arr.length == 0) {
            return 0;
        }
        //代表跳了几次
        int jump = 0;
        int cur = 0;
        int next = 0;
        for (int i = 0; i < arr.length; i++) {
            if (cur < i){
                jump++;
                cur = next;
            }
            next = Math.max(next,i+arr[i]);
        }
        return jump;
    }

    public static void main(String[] args) {
        int[] arr={3,2,3,1,1,4};
        int i = jump(arr);
        System.out.println(i);
    }
}

贪心方法的时间复杂度为O(n),空间复杂度为O(1)。

上一篇 下一篇

猜你喜欢

热点阅读