---
# System prepended metadata

title: 1583. Count Unhappy Friends
tags: [Leetcode, Bloomberg, Medium]

---

# 1583. Count Unhappy Friends
###### tags: `Leetcode` `Medium` `Bloomberg`
Link: https://leetcode.com/problems/count-unhappy-friends/
## 思路
题目的意思有点不太好理解
参考中文版的一个解释，就是一对情侣A跟B出去玩，结果别人把A和D分到一起去了（D在A那里没有B重要），把B和C分到一起去了（C在B那里也没有A重要），所以A和B就会不开心
这里我的想法是对每一个人建一个set存他觉得比现在跟他组队的人更重要的人，后面check的时候，如果A把B放在set里面，B也把A放在自己的set里面，就说明他们两个都不开心

## Code
```java=
class Solution {
    public int unhappyFriends(int n, int[][] preferences, int[][] pairs) {
        int cnt = 0;
        int[] pair = new int[pairs.length*2];
        for(int i = 0;i < pairs.length;i++){
            pair[pairs[i][0]]=pairs[i][1];
            pair[pairs[i][1]]=pairs[i][0];
        }
        List<Set<Integer>> l = new ArrayList<>();
        for(int i = 0;i < preferences.length;i++){
            Set<Integer> preference = new HashSet<>();
            int len = preferences[i].length;
            for(int j = 0;j < len;j++){
                if(preferences[i][j] == pair[i]) break;
                preference.add(preferences[i][j]);
            }
            l.add(preference);
        }
        
        for(int i = 0;i < pairs.length;i++){
            for(int friend:l.get(pairs[i][0])){
                if(l.get(friend).contains(pairs[i][0])){
                    cnt++;
                    break;
                }
            }
            for(int friend:l.get(pairs[i][1])){
                if(l.get(friend).contains(pairs[i][1])){
                    cnt++;
                    break;
                }
            }
        }
        return cnt;
    }
}
```