您的位置:首页 > 产品设计 > UI/UE

leetcode 128: Longest Consecutive Sequence

2015-08-16 21:21 567 查看
Use the unordered set which has the O(1) time complexity when accessing one number. The key here is to update the max only when I find one number is the left most number in one range.

class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<int> set;
for(int i=0;i<nums.size();i++)
set.insert(nums[i]);
int max=0;
unordered_set<int>::iterator it;
for(it=set.begin();it!=set.end();it++)
{
int num=*it;
if(set.find(num-1)==set.end())
{
while(set.find(num+1)!=set.end())
num++;
if(num-*it+1>max)
max=num-*it+1;
}
}
return max;
}
};

Updated version. Find the maximum range for one number and erase all numbers visited.

class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<int> numSet;
int size=nums.size();
for(int i=0;i<size;i++)
numSet.insert(nums[i]);
unordered_set<int>::iterator it;
int res=0;
for(it=numSet.begin();it!=numSet.end();it++)
{
int l=*it,r=*it;
while(numSet.find(l-1)!=numSet.end())
{
numSet.erase(l-1);
l--;
}
while(numSet.find(r+1)!=numSet.end())
{
numSet.erase(r+1);
r++;
}
if(r-l+1>res)
res=r-l+1;
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: