首页 > 其他 > 详细

[LeetCode] Longest Consecutive Sequence

时间:2015-01-09 22:07:56      阅读:246      评论:0      收藏:0      [点我收藏+]

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.

我的思路

这道题在 LeetCode 上通过率也就 30% 不到,还标记为 hard 了,其实题目并不难。

使用排序,当然可以解决这个问题,但是时间复杂度为 O(nlgn) ,显然不符合我们的题意。这道题我们需要考虑使用 hashmap ,以下是我 AC 后的代码,注意 LeetCode 支持c++11。

/**
 * Zhou J
 */

class Solution 
{
public:
    int longestConsecutive(vector<int> &num) 
    {
        unordered_map<int, int> hs;
        for (const auto &ival : num)
        {
            hs.insert(make_pair(ival, 0));
        }
        
        int maxl = 1;
        
        for (const auto &ival : num)
        {
            if (hs.find(ival)->second == 1)
            {
                continue;
            }
            
            // initialize the current_max before every loop
            int current_max = 1;
            
            // record the right side
            int tmp = ival;
            while(hs.count(tmp + 1))
            {
                current_max ++;
                tmp ++;
                hs[tmp] = 1;
            }
            
            // record the left side
            tmp = ival;
            while(hs.count(tmp - 1))
            {
                current_max ++;
                tmp --;
                hs[tmp] = 1;
            }
            
            // update the returned maxl
            maxl = max(current_max, maxl);
        }
        
        return maxl;
    }
};

[LeetCode] Longest Consecutive Sequence

原文:http://www.cnblogs.com/jianxinzhou/p/4214153.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!