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

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

时间:2018-09-29 19:16:39      阅读:553      评论:0      收藏:0      [点我收藏+]

标签:return   bsp   etc   存在   family   amp   cto   for   序列   

题目描述

 

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

要求算法的时间复杂度为 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)

标签:return   bsp   etc   存在   family   amp   cto   for   序列   

原文地址:https://www.cnblogs.com/wmx24/p/9725199.html

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