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.

    map<int, int> mp;



    int longestConsecutive(vector<int> &num) 

    {

        int i;

        // map all the numbers and set value to 1 (not accessed state)

        for (i = 0; i < num.size(); i++)

        {

            mp[num[i]] = 1;

        }



        int res = 0;

        for (i = 0; i<num.size(); i++){

            int sum = 1;

            if (mp.count(num[i]))

            {

                mp[num[i]] = 0;

                int left = num[i] - 1;

                // if the left number exist in the map and not accessed

                while (mp.count(left) && mp[left] != 0)

                {

                    mp[left--] = 0;

                    sum++;

                }

                int right = num[i] + 1;

                // if the right member exist in the map and not accessed

                while (mp.count(right) && mp[right] != 0)

                {

                    mp[right++] = 0;

                    sum++;

                }

            }

            if (res<sum)

                res = sum;

        }

        return res;

    };

 

int _tmain(int argc, _TCHAR* argv[])

{

    Solution *sln = new Solution();

vector<int> svec;

    svec.push_back(100);

    svec.push_back(4);

    svec.push_back(200);

    svec.push_back(3);

    svec.push_back(101);

    svec.push_back(2);

    svec.push_back(3);

    svec.push_back(99);

    svec.push_back(2);

    svec.push_back(98);

    svec.push_back(96);

    svec.push_back(97);



    int ret = sln->longestConsecutive(svec);

    cout << ret << endl;



    return 0;

}

你可能感兴趣的:(sequence)