• 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;
    }
  • 相关阅读:
    Spring加载机制
    SpringMVC 请求过程
    Spring事务传播机制
    数组扩容
    hashmap 底层原和扩容机制
    spring源码
    金字塔表达方式(三)如何使得一个事情变得清晰有逻辑
    金字塔表达方式(二)如何判断事情的逻辑是否正确
    C#设计模式(3)——单例模式(Singleton)
    C#设计模式(2)——工厂模式
  • 原文地址:https://www.cnblogs.com/pengpenghappy/p/3864157.html
Copyright © 2020-2023  润新知