45. 跳跃游戏 II

最近比较忙,最近两周都没怎么刷题,趁着周末,小刷两道怡下情哈哈

自己解法

这题因为还有印象,就是贪婪算法,去算当前点跳跃能覆盖的范围,在这个范围找到一个能跳最远的点进行跳跃,以此类推就搞定了。

class Solution {

    public int jump(int[] nums) {

        if (nums.length == 1) {

            return 0;

        }

        int index = 0;

        int maxPos = nums[0];

        int count = 1;

        while (maxPos < nums.length - 1) {

            int m = maxPos;

            for (int j = index + 1; j <= m; j++) {

                if (nums[j] + j > maxPos) {

                    index = j;

                    maxPos = nums[j] + j;

                } 

            }

            count++;

        }

        return count;

    }

}

官方解法

这题因为在公交上看过,印象深刻,佩服一下自己的记忆力哈哈,所以思路是一样的,只是官方写法更整齐,更统一。

class Solution {

    public int jump(int[] nums) {

        int length = nums.length;

        int end = 0;

        int maxPosition = 0;

        int steps = 0;

        for (int i = 0; i < length - 1; i++) {

            maxPosition = Math.max(maxPosition, i + nums[i]);

            if (i == end) {

                end = maxPosition;

                steps++;

            }

        }

        return steps;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。