Longest Consecutive Sequence
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.
思路:
(1) 用排序的思路的话,算法复杂度O(nlg(n))
(2) 用map,将数值设为key,然后是否存在设为value,查询的复杂度为O(n)
(3) 注意如果一个数查询过了,需要删掉,否则会超时。
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
map<int,int> f;
for(int i=0;i<nums.size();i++)
{
f[nums[i]]=1;
}
int count=0;
int max=0;
for(int i=0;i<nums.size();i++)
{
count=1;
if(f.count(nums[i]))
{
f[nums[i]]=0;
int left=nums[i]-1;
while(f.count(left)&&f[left]!=0)
{f[left]=0;left--;count++;}
int right=nums[i]+1;
while(f.count(right)&&f[right]!=0)
{f[right]=0;right++;count++;}
}
if(max<count)
max=count;
}
return max;
}
};