【算法】【线性表】【数组】最长连续序列

1  题目

给定一个未排序的整数数组num,找出最长连续序列的长度。

样例 1:

输入:

num = [100, 4, 200, 1, 3, 2]

输出:

4

解释:这个最长的连续序列是 [1, 2, 3, 4]. 返回所求长度 4

2  解答

复制代码
public class Solution {
    /**
     * @param num: A list of integers
     * @return: An integer
     */
    public int longestConsecutive(int[] num) {
        // write your code here
        // 1、当数组为空或者无元素时
        if (num == null || num.length == 0) {
            return 0;
        }
        // 2、将num放置进set中用于快速判断
        Set<Integer> numSet = new HashSet<>(num.length);
        for (int i : num) {
            numSet.add(i);
        }

        int res = 1;
        for (int i : num) {
            // 从下、上判断当前的连续性
            // remove 是关键 能降低复杂度
            int down = i - 1;
            int up = i + 1;
            int acc = 1;
            while (numSet.contains(down)) {
                acc++;
                numSet.remove(down);
                down--;
            }
            while (numSet.contains(up)) {
                acc++;
                numSet.remove(up);
                up++;
            }
            res = Math.max(res, acc);
        }
        return res;
    }
}
复制代码

 

posted @   酷酷-  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示