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

Leetcode 最长连续序列

时间:2019-08-25 18:21:59      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:style   longest   情况   show   seq   tps   blank   auto   one   

题目链接: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 最长连续序列

标签:style   longest   情况   show   seq   tps   blank   auto   one   

原文地址:https://www.cnblogs.com/zaq19970105/p/11408556.html

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