0
点赞
收藏
分享

微信扫一扫

每日算法系列【LeetCode 128】最长连续序列


题目描述

给定一个未排序的整数数组,找出最长连续序列的长度。

每日算法系列【LeetCode 128】最长连续序列_时间复杂度

示例1


输入:
[100, 4, 200, 1, 3, 2]
输出:
4
解释:
最长连续序列是 [1, 2, 3, 4]。它的长度为 4。


题解

哈希表

每日算法系列【LeetCode 128】最长连续序列_时间复杂度_02

代码

哈希表(c++)


class Solution {
public:
int longestConsecutive(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;
}
};


并查集(c++)


class Solution {
public:
unordered_map<int, int> fa, cnt;

int find(int x) {
return x==fa[x] ? x : fa[x]=find(fa[x]);
}

int merge(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];
}

int longestConsecutive(vector<int>& nums) {
if (!nums.size()) return 0;
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;
}
};


举报

相关推荐

0 条评论