关闭

LeetCode 55: Jump Game

标签: leetcode
60人阅读 评论(0) 收藏 举报
分类:

LeetCode 55: Jump Game

算法一思路

(1)假定用start出发,用next记录从[start + 1, end]出发能到达的最远距离;
(2)更新start和end;
(3)如果next和end相等,表明不能继续,返回false;

代码

public class Solution {
    public boolean canJump(int[] nums) {
        if (nums.length == 1) return true;
        int start = 0, end = nums[0], next = end;
        while (end < nums.length - 1) {
            for (int i = start + 1; i <= end; i++) {
                if (i + nums[i] > next) next = i + nums[i]; 
            }
            if (next == end) return false;
            start = end;
            end = next;
        }
        return true;
    }
}

算法二思路

(1)从nums.length - 1 开始,如果 i + nums[i] >= min,表明如果能到达i则一定能到达最后一个索引处;
(2)更新min;
(3)最后min等于0,表示到达0就能到达最后,返回true;
(4)这两种算法的时间复杂度均为O(N).

public class Solution {
    public boolean canJump(int[] nums) {
        int N = nums.length;
        int min = N - 1;
        for (int i = N - 2; i >= 0; i--) {
            if (i + nums[i] >= min) min = i;
        }
        return (min == 0);
    }
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:713次
    • 积分:103
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类