力扣128. 最长连续序列

 1.排序后运算(nlogn),不符合题意,但在力扣里超过100%,估计是数据量太小。

 2.并查集,主要开销在查找时间上

 1 class Solution {
 2 public:
 3     unordered_map<int, int> parent; //记录父节点
 4     unordered_map<int, int> length; //记录最大长度
 5 
 6     int find(int x) {
 7         if (parent[x] == x) {
 8             return x;
 9         }
10         return parent[x] = find(parent[x]);
11     }
12     void merge(int x, int y) {
13         int px = find(x);
14         int py = find(y);
15         if (px != py) { //更新父节点与最大长度
16             parent[py] = px;
17             length[px] += length[py];
18         } 
19     }
20     int longestConsecutive(vector<int>& nums) {
21         int maximum = 0;
22         for (auto i : nums) {
23             if (parent.find(i) == parent.end()) {
24                 parent[i] = i;
25                 length[i] = 1;
26             }
27             if (parent.find(i - 1) != parent.end()) {
28                 merge(i - 1, i);
29             }
30             if (parent.find(i + 1) != parent.end()) {
31                 merge(i, i + 1);
32             }
33             maximum = max(length[parent[i]], maximum);
34         }
35         return maximum;
36     }
37 };

 

posted on 2025-02-27 10:50  Coder何  阅读(14)  评论(0)    收藏  举报