题目
https://leetcode-cn.com/problems/couples-holding-hands/
代码
class Solution {
int[] p=new int[70];
public void union(int a,int b){
p[find(a)]=p[find(b)];
}
public int find(int x){
if(p[x]!=x){
p[x]=find(p[x]);
}
return p[x];
}
public int minSwapsCouples(int[] row) {
int len=row.length;
int n=len/2;//多少对情侣
for(int i=0;i<n;i++){
p[i]=i;
}
for(int i=0;i<len;i=i+2){
union(row[i]/2,row[i+1]/2);
}
int count=0;
for(int i=0;i<n;i++){
if(i!=find(i))
count++;
}
return count;//环的个数
}
}
复杂度
时间复杂度:O(n)
空间复杂度:O(n)