-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathP_710.java
More file actions
69 lines (61 loc) · 1.78 KB
/
Copy pathP_710.java
File metadata and controls
69 lines (61 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package leetcode.hard;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Random;
import java.util.Set;
@SuppressWarnings({ "MethodParameterNamingConvention", "InnerClassMayBeStatic", "unused" })
public class P_710 {
class SolutionMap {
Map<Integer, Integer> map;
Random r;
int range;
SolutionMap(int N, int[] blacklist) {
map = new HashMap<>();
for (int b : blacklist) {
map.put(b, -1);
}
range = N - map.size();
N--;
for (int b : blacklist) {
if (b < range) {
while (map.containsKey(N)) {
N--;
}
map.put(b, N--);
}
}
r = new Random();
}
public int pick() {
final int p = r.nextInt(range);
return map.getOrDefault(p, p);
}
}
class Solution {
Random r;
Map<Integer, Integer> banned;
int limit;
Solution(int N, int[] blacklist) {
Arrays.sort(blacklist);
r = new Random();
banned = new HashMap<>();
limit = N - blacklist.length;
final Set<Integer> set = new HashSet<>();
for (int num : blacklist) {
set.add(num);
}
for (int i = limit, j = 0, k = 0; k < blacklist.length; k++, i++) {
if (set.contains(i)) {
continue;
}
banned.put(blacklist[j++], i);
}
}
public int pick() {
final int num = r.nextInt(limit);
return banned.getOrDefault(num, num);
}
}
}