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

Posted FlyingWarrior

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 128. 最长连续序列(Longest Consecutive Sequence)相关的知识,希望对你有一定的参考价值。

题目描述

 

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

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

示例:

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

 

解题思路

 

利用并查集的思想,构造一个map记录数组中以每个数所在的最长连续序列长度。每次遍历到一个数时,首先检查map中是否存在该数,若存在直接跳过,否则作如下更新操作:

找到左右相邻数字是否在map中,若存在则分别记录他们所在的最长连续序列长度,并更新当前的最长连续序列长度,然后把长度更新到新序列左右端点和此数对应的map中。

 

代码

 

 1 class Solution {
 2 public:
 3     int longestConsecutive(vector<int>& nums) {
 4         map<int, int> m;
 5         int maxLen = 0;
 6         for(int num: nums){
 7             if(m.count(num)) continue;
 8             int left = m.count(num - 1) ? m[num - 1] : 0;
 9             int right = m.count(num + 1) ? m[num + 1] : 0;
10             int len = left + right + 1;
11             maxLen = max(maxLen, len);
12             m[num - left] = len;
13             m[num + right] = len;
14             m[num] = len;
15         }
16         return maxLen;
17     }
18 };

 

以上是关于LeetCode 128. 最长连续序列(Longest Consecutive Sequence)的主要内容,如果未能解决你的问题,请参考以下文章

图解leetcode —— 128. 最长连续序列

Leetcode 128 最长连续序列

Leetcode 128 最长连续序列

LeetCode128. 最长连续序列

[LeetCode] 128. 最长连续序列

LeetCode--128--最长连续序列(python)