链接:https://leetcode.com/tag/union-find/
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica }
【128】Longest Consecutive Sequence (2018年11月22日,开始解决hard题)
给了一个无序的数组,问这个数组里面的元素(可以重新排序)能组成的最长的连续子序列是多长。本题的时间复杂度要求是 O(N).
本题 array 专题里面有, 链接:https://www.cnblogs.com/zhangwanying/p/9610923.html ,用个 hashmap 可以做到 O(N).
本题用 union-find 怎么解,不知道 orz。
【130】Surrounded Regions
【200】Number of Islands
【261】Graph Valid Tree
【305】Number of Islands II
【323】Number of Connected Components in an Undirected Graph
【547】Friend Circles
【684】Redundant Connection (2018年11月22日,contest 51 模拟赛做到了)
在本题中,树是一个无环的无向图。输入一个N个结点(编号是1~N)的图,有一条边是多余的,把这条边找出来。
Example 1: Input: [[1,2], [1,3], [2,3]] Output: [2,3] Explanation: The given undirected graph will be like this: / - 3 Example 2: Input: [[1,2], [2,3], [3,4], [1,4], [1,5]] Output: [1,4] Explanation: The given undirected graph will be like this: - 1 - 2 | | - 3 Note: The size of the input 2D-array will be between 3 and 1000. Every integer represented in the 2D-array will be between 1 and N, where N is the size of the input array.
题解:我是用并查集解的。对于每一条边的两个结点,如果他们的爸爸不是同一个爸爸,那么就 unoin 这两个结点,如果他们两个的爸爸是同一个爸爸,就说明这条边多余了,直接返回这条边就行了。
1 class Solution { 2 public: 3 int findfather(int x) { 4 return x == father[x] ? x : findfather(father[x]); 5 } 6 void unionNode(int x, int y) { 7 x = findfather(x); 8 y = findfather(y); 9 if (x == y) { return; } 10 father[y] = x; 11 } 12 13 vector<int> findRedundantConnection(vector<vector<int>>& edges) { 14 n = edges.size(); 15 father.resize(n+1); //redundant 0 16 for (int i = 0; i < n+1; ++i) { 17 father[i] = i; 18 } 19 vector<int> ret; 20 for (auto e : edges) { 21 int u = min(e[0], e[1]), v = max(e[0], e[1]); 22 if (findfather(v) == findfather(u)) { 23 ret = e; 24 break; 25 } else { 26 unionNode(u, v); 27 } 28 } 29 return ret; 30 } 31 int n = 0; 32 vector<int> father; 33 34 };
【685】Redundant Connection II
【721】Accounts Merge
【737】Sentence Similarity II
【765】Couples Holding Hands
【778】Swim in Rising Water
【803】Bricks Falling When Hit
【839】Similar String Groups
【928】Minimize Malware Spread II
原文地址:https://www.cnblogs.com/zhangwanying/p/9964303.html