classSolution { public: intlongestConsecutive(vector<int>& nums){ unordered_map<int, int> mp; for (auto x : nums) mp[x] = 1; int res = 0; for (auto x : nums) { if (mp.count(x-1)) continue; int y = x; while (mp.count(++y)); res = max(res, y-x); } return res; } };
intfind(int x){ return x==fa[x] ? x : fa[x]=find(fa[x]); }
intmerge(int x, int y){ x = find(x); y = find(y); if (x == y) return cnt[x]; fa[y] = x; cnt[x] += cnt[y]; return cnt[x]; }
intlongestConsecutive(vector<int>& nums){ if (!nums.size()) return0; for (auto x : nums) { fa[x] = x; cnt[x] = 1; } int res = 1; for (auto x : nums) { if (fa.count(x+1)) { res = max(res, merge(x, x+1)); } } return res; } };