美文网首页
跳跃游戏 -dp

跳跃游戏 -dp

作者: fdsun | 来源:发表于2020-06-02 10:49 被阅读0次

    给出一个非负整数数组,你最初定位在数组的第一个位置。

    数组中的每个元素代表你在那个位置可以跳跃的最大长度。

    判断你是否能到达数组的最后一个位置。

    样例
    样例 1

    输入 : [2,3,1,1,4]
    输出 : true
    样例 2

    输入 : [3,2,1,0,4]
    输出 : false
    挑战
    这个问题有两个方法,贪心和动态规划。

    贪心方法时间复杂度为O(N)。

    动态规划方法的时间复杂度为为O(n^2)。

    我们手动设置小型数据集,使大家可以通过测试的两种方式。这仅仅是为了让大家学会如何使用动态规划的方式解决此问题。如果您用动态规划的方式完成它,你可以尝试贪心法,以使其再次通过一次。

    注意事项
    数组A的长度不超过5000,每个元素的大小不超过5000

        /**
         * i -> n-1
         * n-1 - i <= f[i]
         *
         * @param A: A list of integers
         * @return: A boolean
         */
        public static boolean canJump(int[] A) {
            // write your code here
            int n = A.length;
            boolean[] f = new boolean[n];
            f[0] = true;
    
            for (int i = 1; i < n; i++) {
                for (int j = 0; j < i; j++) {
                    if (f[j] && A[j] + j >= i) {
                        f[i] = true;
                        break;
                    }
                }
            }
            return f[n - 1];
        }
    

    相关文章

      网友评论

          本文标题:跳跃游戏 -dp

          本文链接:https://www.haomeiwen.com/subject/lhayzhtx.html