2023每日刷题(二十七)
Leetcode—765.情侣牵手
并查集+置换环思路
参考自ylb
实现代码
class Solution {
public:
int minSwapsCouples(vector<int>& row) {
int n = row.size();
int len = n / 2;
vector<int> p(len);
iota(p.begin(), p.end(), 0);
function<int(int)> find = [&](const int &x) {
if(x != p[x]) {
p[x] = find(p[x]);
}
return p[x];
};
for(int i = 0; i < n; i += 2) {
int left = row[i] / 2;
int right = row[i + 1] / 2;
p[find(left)] = find(right);
}
int ans = len;
for(int i = 0; i < len; i++) {
ans -= i == find(i);
}
return ans;
}
};
运行结果
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!