首页 > 其他 > 详细

[并查集] leetcode 128 Longest Consecutive Sequence

时间:2019-08-06 13:02:19      阅读:109      评论:0      收藏:0      [点我收藏+]

problem:https://leetcode.com/problems/longest-consecutive-sequence/

         使用并查集,时间不是严格的O(n)

class Solution {
public:

    unordered_map<int, int> p;
    int Find(int x)
    {
        while (x != p[x])
        {
            x = p[x];
        }
        return x;
    }

    void Union(int x, int y)
    {
        int px = Find(x);
        int py = Find(y);
        if (px != py)
        {
            p[px] = py;
        }
    }
    int longestConsecutive(vector<int>& nums) {
        unordered_set<int> s;
        for (int i = 0; i < nums.size(); i++)
        {
            p[nums[i]] = nums[i];
        }
        for (int i = 0; i < nums.size(); i++)
        {
            if (nums[i] != INT_MAX && s.find(nums[i] + 1) != s.end())
            {
                Union(nums[i], nums[i] + 1);
            }
            if (nums[i] != INT_MIN && s.find(nums[i] - 1) != s.end())
            {
                Union(nums[i], nums[i] - 1);
            }
            s.insert(nums[i]);
        }

        int res = 0;
        unordered_map<int, int> count;
        for (auto& n : p)
        {
            int parent = Find(n.first);
            //cout << n.first << " " << parent << endl;
            count[parent]++;
            res = max(res, count[parent]);
        }

        return res;
    }
};

 

[并查集] leetcode 128 Longest Consecutive Sequence

原文:https://www.cnblogs.com/fish1996/p/11308200.html

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