1
1
class RandomizedSet {
2
- HashMap <Integer , Integer > hm ;
3
- ArrayList <Integer > keys ;
4
- Random generator ;
2
+ private List <Integer > list ;
3
+ private Map <Integer , Integer > hm ;
5
4
6
5
/** Initialize your data structure here. */
7
6
public RandomizedSet () {
8
- hm = new HashMap <Integer , Integer >();
9
- keys = new ArrayList <Integer >();
10
- generator = new Random ();
7
+ list = new ArrayList <>();
8
+ hm = new HashMap <>();
11
9
}
12
10
13
11
/**
@@ -19,8 +17,8 @@ public boolean insert(int val) {
19
17
return false ;
20
18
}
21
19
22
- hm . put (val , keys . size () );
23
- keys . add (val );
20
+ list . add (val );
21
+ hm . put (val , list . size () - 1 );
24
22
return true ;
25
23
}
26
24
@@ -33,21 +31,22 @@ public boolean remove(int val) {
33
31
return false ;
34
32
}
35
33
36
- int removeIdx = hm .get (val );
34
+ int idx = hm .get (val );
35
+ int lastElement = list .get (list .size () - 1 );
37
36
38
- if (removeIdx < keys .size () - 1 ) {
39
- int lastVal = keys .get (keys .size () - 1 );
40
- keys .set (removeIdx , lastVal );
41
- hm .put (lastVal , removeIdx );
42
- }
43
-
44
- keys .remove (keys .size () - 1 );
37
+ list .set (idx , lastElement );
38
+ list .remove (list .size () - 1 );
39
+ hm .put (lastElement , idx );
45
40
hm .remove (val );
41
+
46
42
return true ;
47
43
}
48
44
49
45
/** Get a random element from the set. */
50
46
public int getRandom () {
51
- return keys .get (generator .nextInt (hm .size ()));
47
+ Random rand = new Random ();
48
+ int randIdx = rand .nextInt (list .size ());
49
+
50
+ return list .get (randIdx );
52
51
}
53
52
}
0 commit comments