题目出处:https://leetcode-cn.com/problems/count-unhappy-friends/
思路:由题意可得,如果x不开心,则order[x][u] < order[x][y]且order[u][x] < order[u][v]。(其中order[i][j]表示朋友j在i的朋友列表中的亲密度下标,数值越小表示越亲密)
- 首先要构造二维数组order。
- 其次要构造一个数据结构match,记录着每个朋友配对的朋友。
class Solution {
public:
int unhappyFriends(int n, vector<vector<int>>& preferences, vector<vector<int>>& pairs) {
vector<vector<int>> order(n, vector<int>(n, 0));
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, 0);
for(auto & pair : pairs){
match[pair[0]] = pair[1];
match[pair[1]] = pair[0];
}
int ans = 0;
for(int x = 0; x < n; ++x){
int y = match[x];
int index = order[x][y];
for(int i = 0; i < index; ++i){
int u = preferences[x][i];
int v = match[u];
if(order[u][x] < order[u][v]){
++ans;
break;
}
}
}
return ans;
}
};