[LintCode] Longest Consecutive Sequence 求最长连续序列

简介:

Given an unsorted array of integers, find the length of the longest consecutive elements sequence.

Clarification

Your algorithm should run in O(n) complexity.

Example

Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is[1, 2, 3, 4]. Return its length: 4.

LeetCode上的原题,请参见我之前的博客Longest Consecutive Sequence

解法一:

class Solution {
public:
    /**
     * @param nums: A list of integers
     * @return an integer
     */
    int longestConsecutive(vector<int> &num) {
        int res = 0;
        unordered_set<int> s(num.begin(), num.end());
        for (int d : num) {
            if (!s.count(d)) continue;
            s.erase(d);
            int pre = d - 1, next = d + 1;
            while (s.count(pre)) s.erase(pre--);
            while (s.count(next)) s.erase(next++);
            res = max(res, next - pre - 1);
        }
        return res;
    }
};

解法二:

class Solution {
public:
    /**
     * @param nums: A list of integers
     * @return an integer
     */
    int longestConsecutive(vector<int> &num) {
        int res = 0;
        unordered_map<int, int> m;
        for (int d : num) {
            if (m.count(d)) continue;
            int left = m.count(d - 1) ? m[d - 1] : 0;
            int right = m.count(d + 1) ? m[d + 1] : 0;
            int sum = left + right + 1;
            m[d] = sum;
            res = max(res, sum);
            m[d - left] = sum;
            m[d + right] = sum;
        }
        return res;
    }
};

本文转自博客园Grandyang的博客,原文链接:求最长连续序列[LintCode] Longest Consecutive Sequence ,如需转载请自行联系原博主。

相关文章
|
C语言 开发者
C语言中如何精确实现数组元素的插入
C语言中如何精确实现数组元素的插入
cd 切换目录
cd 切换目录。
168 2
|
数据采集 数据管理 数据库
LabVIEW编程LabVIEW开发TSI 8587A型气溶胶光度计例程与相关资料
LabVIEW编程LabVIEW开发TSI 8587A型气溶胶光度计例程与相关资料
72 0
|
SQL 数据可视化 安全
宝塔面板使用`Navicat`或其他工具连接数据库
Linux如果想要自己配置环境,多多少少还是有些麻烦,于是大部分的用户会选择为没有界面的Linux安装一个可视化面板,宝塔面板一切都会帮你完成,但是有时候,我们想要用SQL管理工具连接数据库时,我们却连接不上去。
521 0
|
运维 NoSQL Ubuntu
Docker 镜像制作 服务编排 私有仓库
Docker 镜像制作 服务编排 私有仓库
334 0
|
存储 JSON 关系型数据库
|
监控 Oracle 关系型数据库
ORA-19815,ORA-19809 :limit exceeded for recovery files
    数据库重新启动的时候,收到了ORA-19815的错误。从错误的提示来看,是由于闪回区的空间被填满导致无法成功启动。这种情形我们通常考虑的是清除归档日志,那就直接在OS层面rm了,真的是这样吗?客官,如果你有相同的情形,接下往下看.
1096 0
|
Oracle 关系型数据库 SQL