LeetCode 第128题:最长连续序列

2022-04-02  本文已影响0人  放开那个BUG

1、前言

题目描述

2、思路

使用最原始的排序思路,时间复杂度为 nlogn。因为题目不要求序列在数组中连续,所以极端情况下可以将整个数组作为一个整体,然后排序,针对相等的数跳过;针对两个数前后差值为1,则加1;否则 len 重置。

或者使用 hashmap。

3、代码

class Solution {
    public int longestConsecutive(int[] nums) {
        if(nums == null || nums.length == 0){
            return 0;
        }

        Arrays.sort(nums);
        int maxLength = 0, len = 1;
        for (int i = 1; i < nums.length; i++) {
            maxLength = Math.max(maxLength, len);

            if(nums[i] - nums[i - 1] == 1){
                len++;
            }else if(nums[i] - nums[i - 1] == 0){
                continue;
            }else {
                len = 1;
            }
        }

        return Math.max(maxLength, len);
    }
}
public int longestConsecutive(int[] nums) {
        if(nums == null || nums.length == 0){
            return 0;
        }
        Set<Integer> set = new HashSet<>();
        for (int num : nums) {
            set.add(num);
        }
        int max = 0;
        for (int num : nums) {
            // 如果有比自己小的,让小的先来,最终会找到每个阶段的小的
            if(set.contains(num - 1)){
                continue;
            }
            // 每个阶段的小的找到了,现在看能连续到多少
            int r = num;
            while (set.contains(r + 1)){
                r++;
            }
            max = Math.max(max, r - num + 1);
        }
        return max;
    }
上一篇 下一篇

猜你喜欢

热点阅读