Leetcode 最长连续序列

Posted zaq19970105

tags:

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

题目链接:https://leetcode-cn.com/problems/longest-consecutive-sequence/

题目大意:

  略。

分析:

  注意有重复值,序列为空等情况。

代码如下:

技术图片
 1 class Solution 
 2 public:
 3     int longestConsecutive(vector<int>& nums) 
 4         unordered_map< int, int > m1; // 存以 key 为首的最长连续序列的长度
 5         unordered_map< int, int > m2; // 存以 key 为尾的最长连续序列的长度
 6         unordered_set< int > vis; // 检查数是否出现过
 7         int ans = 0;
 8         
 9         for(int i = 0; i < nums.size(); ++i) 
10             if(vis.find(nums[i]) != vis.end()) continue;
11             vis.insert(nums[i]);
12             
13             m1[nums[i]] = m2[nums[i]] = 1;
14             
15             if(m2.find(nums[i] - 1) != m2.end())  // 查一下是否存在以nums[i] - 1结尾的序列
16                 splice(nums[i] - 1, nums[i], m2, m1); // 拼接
17             
18             if(m1.find(nums[i] + 1) != m1.end())  // 查一下是否存在以nums[i] + 1开头的序列
19                 splice(nums[i], nums[i] + 1, m2, m1); // 拼接
20             
21         
22         
23         for(auto &x : m1) ans = max(ans, x.second);
24         
25         return ans;
26     
27     
28     // 拼接以B结尾的序列和以A开头的序列
29     inline void splice(int B, int A, unordered_map< int, int > &mB, unordered_map< int, int > &mA) 
30         mB[A + mA[A] - 1] = mA[B - mB[B] + 1] = mB[B] + mA[A];
31         mA.erase(A);
32         mB.erase(B);
33     
34 ;
View Code

 

以上是关于Leetcode 最长连续序列的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode - 最长连续递增序列

LeetCode 0128.最长连续序列

LeetCode 128. 最长连续序列

Leetcode 128 最长连续序列

Leetcode 128 最长连续序列

[LeetCode] 128. 最长连续序列