码迷,mamicode.com
首页 > 其他好文 > 详细

128. 最长连续序列(Longest Consecutive Sequence)

时间:2020-07-09 19:39:50      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:跳过   ges   color   解法   复杂   解释   哈希表   输出   tor   

题目描述:

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

要求算法的时间复杂度为 O(n)。

示例:

输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

解题思路:

  这道题暴力解法就是枚举每一个数字,然后计算以该数字为起点的序列的长度,最后更新最大值。时间复杂度o(n2)。排序以后遍历时间复杂度为O(nlng)。用哈希可以简化搜索的过程,使总的时间复杂度编程O(n)。

  枚举出某个数字i后,依次在哈希表中寻找i+1,i+2,...直到找不到,这个时间复杂度为O(n),而那些找到的值在枚举的时候可以判断前一个值是否存在,如果存在就表示这个值被计算过了,可以跳过。此解法时间复杂度为,哈希表构建需要O(n),遍历所有序列需要O(n),跳过所有被枚举过的值需要O(n),所以总的时间复杂度为O(n)。

  代码如下:

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        int res = 0;
        unordered_set<int> n_set{nums.begin(), nums.end()};
        for (auto && item : nums) {
            if (n_set.find(item - 1) != n_set.end())
                continue;
            int i = item + 1;
            while (n_set.find(i) != n_set.end())
                ++i;
            res = max(res, i - item);
        }
        return res;
    }
};

 

128. 最长连续序列(Longest Consecutive Sequence)

标签:跳过   ges   color   解法   复杂   解释   哈希表   输出   tor   

原文地址:https://www.cnblogs.com/yxsrt/p/13275369.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!