Longest Consecutive Sequence(最长连续递增序列)
描述
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
哈希
本题最容易想到的就是暴力方法,或者是排序,但是排序最好情况下也需要nlogn的时间复杂度。
利用一个哈希表,将数组中的所有元素存入哈希表中,对于每一个 i 从i+1开始找连续大于 i 的数存不存在,再从i-1开始找连续小于 i 的数有多少。
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_map<int, bool> used;
int maxlength = 0;
for(auto i : nums)
used[i] = false;
for(auto i : nums)
{
if(used[i])
continue;
int length = 1;
for(int j=i+1; used.find(j)!=used.end(); j++)
{
length++;
used[j] = true;
}
for(int j=i-1; used.find(j)!=used.end(); j--)
{
length++;
used[j] = true;
}
maxlength = max(maxlength, length);
}
return maxlength;
}
};