Skip to content

Commit a154134

Browse files
update 398
1 parent 9935212 commit a154134

File tree

1 file changed

+12
-17
lines changed
  • src/main/java/com/fishercoder/solutions

1 file changed

+12
-17
lines changed

Diff for: src/main/java/com/fishercoder/solutions/_398.java

+12-17
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,28 @@
11
package com.fishercoder.solutions;
22

3-
import java.util.ArrayList;
4-
import java.util.List;
3+
import java.util.*;
54

65
public class _398 {
76

87
//TODO: use reservoir sampling to solve it again
98

109
public static class Solution {
11-
//brute force
12-
int[] input;
13-
java.util.Random rand = new java.util.Random();
10+
Map<Integer, List<Integer>> map;
11+
Random random;
1412

1513
public Solution(int[] nums) {
16-
input = nums;
14+
map = new HashMap<>();
15+
random = new Random();
16+
for (int i = 0; i < nums.length; i++) {
17+
List<Integer> list = map.getOrDefault(nums[i], new ArrayList<>());
18+
list.add(i);
19+
map.put(nums[i], list);
20+
}
1721
}
1822

1923
public int pick(int target) {
20-
List<Integer> list = new ArrayList();
21-
for (int i = 0; i < input.length; i++) {
22-
if (input[i] == target) {
23-
list.add(i);
24-
}
25-
}
26-
if (list.size() == 1) {
27-
return list.get(0);
28-
}
29-
int randomIndex = rand.nextInt(list.size());
30-
return list.get(randomIndex);
24+
List<Integer> list = map.get(target);
25+
return list.get(random.nextInt(list.size()));
3126
}
3227
}
3328
}

0 commit comments

Comments
 (0)