代码求解
初始化并查集,每对情侣初始集合只有自身,遍历数组,计算相邻两人情侣编号并合并,合并之后集合数量减一,最后用总情侣对数减去集合数量得到结果。
publicstaticintminSwapsCouples(int[]row){intn=row.length;build(n/2);for(inti=0;i<n;i+=2){union(row[i]/2,row[i+1]/2);}returnn/2-sets;}publicstaticintMAXN=31;publicstaticint[]father=newint[MAXN];publicstaticintsets;publicstaticvoidbuild(intm){for(inti=0;i<m;i++){father[i]=i;}sets=m;}publicstaticintfind(inti){if(i!=father[i]){father[i]=find(father[i]);}returnfather[i];}publicstaticvoidunion(intx,inty){intfx=find(x);intfy=find(y);if(fx!=fy){father[fx]=fy;sets--;}}