力扣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 };
浙公网安备 33010602011771号