leetcode 128: Longest Consecutive Sequence

来源:互联网 发布:oracle sql优化 编辑:程序博客网 时间:2024/05/01 13:49

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


0 0
原创粉丝点击