1
+ class Solution {
2
+ public int unhappyFriends (int n , int [][] preferences , int [][] pairs ) {
3
+ Map <Integer , Set <Integer >> map = new HashMap <>();
4
+ for (int [] pair : pairs ) {
5
+ calcBetter (preferences [pair [0 ]], map , pair [0 ], pair [1 ]);
6
+ calcBetter (preferences [pair [1 ]], map , pair [1 ], pair [0 ]);
7
+ }
8
+ Set <Integer > set = new HashSet <>();
9
+ for (int i = 0 ; i < pairs .length ; i ++) {
10
+ for (int j = i + 1 ; j < pairs .length ; j ++) {
11
+ if (unhappy (pairs [i ][0 ], pairs [j ][0 ], map )) {
12
+ set .add (pairs [i ][0 ]);
13
+ set .add (pairs [j ][0 ]);
14
+ }
15
+ if (unhappy (pairs [i ][1 ], pairs [j ][0 ], map )) {
16
+ set .add (pairs [i ][1 ]);
17
+ set .add (pairs [j ][0 ]);
18
+ }
19
+ if (unhappy (pairs [i ][0 ], pairs [j ][1 ], map )) {
20
+ set .add (pairs [i ][0 ]);
21
+ set .add (pairs [j ][1 ]);
22
+ }
23
+ if (unhappy (pairs [i ][1 ], pairs [j ][1 ], map )) {
24
+ set .add (pairs [i ][1 ]);
25
+ set .add (pairs [j ][1 ]);
26
+ }
27
+ }
28
+ }
29
+ return set .size ();
30
+ }
31
+
32
+ private void calcBetter (int [] preference , Map <Integer , Set <Integer >> map , int from , int to ) {
33
+ Set <Integer > betterSet = new HashSet <>();
34
+ for (int i : preference ) {
35
+ if (i == to ) {
36
+ break ;
37
+ }
38
+ betterSet .add (i );
39
+ }
40
+ map .put (from , betterSet );
41
+ }
42
+
43
+ private boolean unhappy (int x , int y , Map <Integer , Set <Integer >> map ) {
44
+ return map .get (x ).contains (y ) && map .get (y ).contains (x );
45
+ }
46
+ }
0 commit comments