【阅读理解题】
dict[i:x]
字典来装朋友dict={朋友: 比他们配对的更亲近的人}
即{朋友:人},这个人比跟他配对的小人与朋友更亲近。
循环直到 朋友i
:人x
都在互相的列表里
Create dictionary using each friend as keys and a list of people they are closer to than the person they are paired with as values.
Then use nested for loop to find when people are on each other’s list.
class Solution:
def unhappyFriends(self, n: int, preferences: List[List[int]], pairs: List[List[int]]) -> int:
dict = {}
for i,x in pairs:
dict[i] = preferences[i][:preferences[i].index(x)]
dict[x] = preferences[x][:preferences[x].index(i)]
ans = 0
for i in dict:
for x in dict[i]:
if i in dict[x]:
ans += 1
break
return ans
注:break原因是一个人只能不开心一次
c++版 哈希表
C++ hashmap zhi-yuan-c
首先根据题意每位朋友只有一个配对,那么对朋友i,就可以知道比他更亲近的朋友的列表。
例如
pf:[[1, 2, 3], [3, 2, 0], [3, 1, 0], [1, 2, 0]]
pair[[0, 1], [2, 3]]
朋友 0:查pf他的匹配1在最亲近的位置,没有任何人的亲近程度可以更高,0必快乐。
朋友 1:查pf比他的匹配0更亲近的有{3,2}。
朋友 2:查pf他的匹配3在最亲近的位置。
朋友 3:查pf比他的匹配2更亲近的有{1}。
对x:y,u:v
题中不开心的条件可理解为,朋友x更亲近列表里有u,且u的更亲近列表有x。
class Solution {
public:
int unhappyFriends(int n, vector<vector<int>>& preferences, vector<vector<int>>& pairs) {
unordered_map<int,unordered_set<int>> hashmap;
for(auto i:pairs){
for(auto j:preferences[i[0]]){
if(j==i[1])break;
hashmap[i[0]].insert(j);
}
for(auto j:preferences[i[1]]){
if(j==i[0])break;
hashmap[i[1]].insert(j);
}
}
int ans=0;
for(auto it = hashmap.begin();it!=hashmap.end();++it){
for(auto i:it->second){
if(hashmap.find(i)!=hashmap.end()){
if(hashmap[i].count(it->first)){
ans++;
break;
}
}
}
}
return ans;
}
};