力扣765题:情侣牵手问题的贪心解法
4个月前 (07-31)

一、题目解读
力扣765题要求在一个座位数组中,每对情侣需相邻而坐。给定n对情侣的初始座位安排(偶数长度数组),需通过最小次数的交换操作,使所有情侣成为相邻座位。
二、贪心算法完整代码
class Solution {
public:
int minSwapsCouples(vector<int>& row) {
int n = row.size();
vector<int> pos(n); // 记录每个人的位置
for (int i = 0; i < n; ++i) {
pos[row[i]] = i;
}
int res = 0;
for (int i = 0; i < n; i += 2) {
int x = row[i];
int y = x ^ 1; // 计算x的情侣ID
if (row[i + 1] == y) continue; // 已经配对
// 交换位置
int j = pos[y];
swap(row[i + 1], row[j]);
pos[row[j]] = j; // 更新位置信息
pos[row[i + 1]] = i + 1;
res++;
}
return res;
}
};原创内容 转载请注明出处






