[leetcode] 89. Longest Consecutive Sequence

题目

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

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

Your algorithm should run in O(n) complexity.

解题之法

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        int res = 0;
        unordered_set<int> s(nums.begin(), nums.end());
        for (int val : nums) {
            if (!s.count(val)) continue;
            s.erase(val);
            int pre = val - 1, next = val + 1;
            while (s.count(pre)) s.erase(pre--);
            while (s.count(next)) s.erase(next++);
            res = max(res, next - pre - 1);
        }
        return res;
    }
};

分析

这道题要求求最长连续序列,并给定了O(n)复杂度限制,我们的思路是,使用一个集合set存入所有的数字,然后遍历数组中的每个数字,如果其在集合中存在,那么将其移除,然后分别用两个变量pre和next算出其前一个数跟后一个数,然后在集合中循环查找,如果pre在集合中,那么将pre移除集合,然后pre再自减1,直至pre不在集合之中,对next采用同样的方法,那么next-pre-1就是当前数字的最长连续序列,更新res即可。

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

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,774评论 0 33
  • 我们在不知名的旅途, 和不知名的男人、女人, 一起唱着不知名的歌曲。 之后,全都擦肩而过, 走上不知名的、 另一条...
    伍月的晴空阅读 248评论 4 10
  • 不知何时开始,我害怕早睡的人。就像我们不知道难熬的日子什么时候会过去,只会感觉越来越接近绝望。 我害怕早睡的人。和...
    燕向北飞阅读 313评论 0 3
  • 五台山五大高峰东台、北台、中台、西台、南台就像佛家的莲花手印中的五根手指一般高高耸立在那里。台怀镇就位于手印的手心...
    李小坏V587阅读 554评论 0 1
  • 一、背景介绍 互联网行业是依托于现代新兴的互联网技术得以快速发展的行业,互联网技术是推进了互联网的快速发展的...
    王君情怀阅读 1,008评论 0 2