Skip to content

Commit d68871c

Browse files
authored
Merge pull request #3259 from saurabh10041998/insert-delete-get-random
Create: 0380-insert-delete-getrandom.rs
2 parents bec4e98 + d482ed5 commit d68871c

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

Diff for: rust/0380-insert-delete-getrandom-o1.rs

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
use rand::seq::SliceRandom;
2+
use std::collections::HashMap;
3+
4+
pub struct RandomizedSet {
5+
mp: HashMap<i32, i32>,
6+
arr: Vec<i32>,
7+
}
8+
9+
impl RandomizedSet {
10+
fn new() -> Self {
11+
RandomizedSet {
12+
mp: HashMap::new(),
13+
arr: Vec::new(),
14+
}
15+
}
16+
17+
fn insert(&mut self, val: i32) -> bool {
18+
let res = !self.mp.contains_key(&val);
19+
if res {
20+
self.mp.insert(val, self.arr.len() as i32);
21+
self.arr.push(val);
22+
}
23+
res
24+
}
25+
fn remove(&mut self, val: i32) -> bool {
26+
let res = self.mp.contains_key(&val);
27+
if res {
28+
let idx = *self.mp.get(&val).unwrap();
29+
self.mp
30+
.entry(*self.arr.last().unwrap())
31+
.and_modify(|v| *v = idx);
32+
self.arr.swap_remove(idx as usize);
33+
self.mp.remove(&val);
34+
}
35+
res
36+
}
37+
fn get_random(&self) -> i32 {
38+
*self.arr.choose(&mut rand::thread_rng()).unwrap()
39+
}
40+
}

0 commit comments

Comments
 (0)