4. Redundant Connection
Input: edges = [[1,2],[1,3],[2,3]]
Output: [2,3]Input: edges = [[1,2],[2,3],[3,4],[1,4],[1,5]]
Output: [1,4]Solution: (Union find)
class Solution
{
public:
int findPar(vector<int> &v, int node)
{
if (v[node] == -1)
{
return node;
}
v[node] = findPar(v, v[node]);
return v[node];
}
void uni(vector<int> &v, vector<int> &rank, int parA, int parB)
{
if (parA != parB)
{
if (rank[parA] > rank[parB])
{
v[parB] = parA;
}
else if (rank[parB] > rank[parA])
{
v[parA] = parB;
}
else
{
v[parA] = parB;
rank[parB]++;
}
}
return;
}
vector<int> findRedundantConnection(vector<vector<int>> &edges)
{
int n = edges.size();
vector<int> res(2);
vector<int> v(n + 1, -1);
vector<int> rank(n + 1, 0);
for (int i = 0; i < edges.size(); i++)
{
int a = edges[i][0];
int b = edges[i][1];
int parA = findPar(v, a);
int parB = findPar(v, b);
if (parA != parB)
{
uni(v, rank, parA, parB);
}
else
{
res[0] = a;
res[1] = b;
}
}
return res;
}
};Last updated

