思路:首先定义出朋友之间的亲密度,这里直接用二维数组存即可,注意x与y的亲密度和y和x的亲密度是不一样的。然后根据题目要求模拟即可。
class Solution {
public:
int unhappyFriends(int n, vector<vector<int>>& preferences, vector<vector<int>>& pairs) {
vector<vector<int>> order(n, vector<int>(n));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n - 1; ++j) {
order[i][preferences[i][j]] = j;
}
}
vector<int> match(n);
for (const auto& pr: pairs) {
match[pr[0]] = pr[1];
match[pr[1]] = pr[0];
}
int res = 0;
for (int i = 0; i < n; i++) {
int x = i, y = match[x];
int index = order[x][y];
for (int j = 0; j < index; j++) {
int u = preferences[x][j];
int v = match[u];
if (order[u][x] < order[u][v]) {
res++;
break;
}
}
}
return res;
}
};