描述
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example, Given [100, 4, 200, 1, 3, 2], The longest consecutive elements sequence is [1,
2, 3, 4]. Return its length: 4.
Your algorithm should run in O(n) complexity.
给一个未排序的整型数组,找到最长连续的序列。
例如给 [100, 4, 200, 1, 3, 2],最长连续序列是.1.2.3.4返回长度时4
时间复杂度必须是O(n)
分析:时间复杂度有限制,不能用普通的排序算法。
用unordered_map进行存储
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_map<int,bool> used;
for(auto i :nums)
used[i]=false;
int longest=0;
for(auto i:nums)
{
int length=1;
if(used[i]==true)
continue;
used[i]=true;
//在map中找比i大1的连续数,如果没有就返回尾后迭代器,有的
//话,继续找。
for(int j=i+1;used.find(j)!=used.end();j++)
{
used[j]=true;
++length;
}
for(int j=i-1;used.find(j)!=used.end();j--)
{
used[j]=true;
++length;
}
longest=max(length,longest);
}
return longest;
}
};
注意是在map容器里进行查找,
长度是循环每个元素时定义的。