https://leetcode-cn.com/problems/couples-holding-hands/
思路:其实想明白不存在最优的交换方式,只能一一交换,这题就解决了。那么可以直接模拟这个过程,复杂度为
O
(
n
2
)
O(n^2)
O(n2)。也可以像官方题解一样,抽象出一个图,把答案和连通分量联系起来,然后用并查集或者
b
f
s
bfs
bfs做,时间复杂度可以更低。
class Solution {
public:
int minSwapsCouples(vector<int>& row) {
int ans=0,n=row.size(),target=0;
for(int i=0;i<n;i+=2)
{
if(row[i]&1)
target=row[i]-1;
else
target=row[i]+1;
if(row[i+1]!=target)
{
++ans;
for(int j=i+2;j<n;j++)
{
if(row[j]==target)
{
swap(row[i+1],row[j]);
break;
}
}
}
}
return ans;
}
};