File tree 1 file changed +12
-17
lines changed
src/main/java/com/fishercoder/solutions
1 file changed +12
-17
lines changed Original file line number Diff line number Diff line change 1
1
package com .fishercoder .solutions ;
2
2
3
- import java .util .ArrayList ;
4
- import java .util .List ;
3
+ import java .util .*;
5
4
6
5
public class _398 {
7
6
8
7
//TODO: use reservoir sampling to solve it again
9
8
10
9
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 ;
14
12
15
13
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
+ }
17
21
}
18
22
19
23
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 ()));
31
26
}
32
27
}
33
28
}
You can’t perform that action at this time.
0 commit comments