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 };

 

posted @ 2018-09-29 18:16  FlyingWarrior  阅读(347)  评论(0编辑  收藏  举报