109_leetcode_Longest Consecutive Sequence

来源:互联网 发布:reminders mac 红点1 编辑:程序博客网 时间:2024/05/03 18:10

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:使用unordered_set ;2:插入数据和寻找数据;3:删除数据;4:查找每一个数字左右两边的数字的个数来判断连续的最大值


    int longestConsecutive(vector<int> &num)    {        int size = (int)num.size();        if(size <= 1)        {            return size;        }                int maxValue = 0;                unordered_set<int> mySet;                for(int i = 0; i < size; i++)        {            mySet.insert(num[i]);        }                int count = 0;        for(int i = 0; i < size; i++)        {            int curNumber = num[i];            unordered_set<int> ::iterator itr = mySet.find(curNumber);            if(itr != mySet.end())            {                count = 1;                mySet.erase(itr);                int leftNumber = num[i]-1;                itr = mySet.find(leftNumber);                while(itr != mySet.end())                {                    mySet.erase(itr);                    count++;                    leftNumber--;                    itr = mySet.find(leftNumber);                }                                int rightNumber = curNumber + 1;                itr = mySet.find(rightNumber);                while(itr!= mySet.end())                {                    mySet.erase(itr);                    count++;                    rightNumber++;                    itr = mySet.find(rightNumber);                }                                if(count > maxValue)                {                    maxValue = count;                }            }        }                        return maxValue;    }


0 0