From 18a7e32d4046c77949b71e387dfd858aeafe7e16 Mon Sep 17 00:00:00 2001 From: saurabh10041998 Date: Fri, 26 Jan 2024 14:04:21 +0530 Subject: [PATCH 1/2] Leetcode solution to the problem: insert-delete-getrandom-o1 --- rust/0380-insert-delete-getrandom.rs | 40 ++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 rust/0380-insert-delete-getrandom.rs diff --git a/rust/0380-insert-delete-getrandom.rs b/rust/0380-insert-delete-getrandom.rs new file mode 100644 index 000000000..61913abb1 --- /dev/null +++ b/rust/0380-insert-delete-getrandom.rs @@ -0,0 +1,40 @@ +use rand::seq::SliceRandom; +use std::collections::HashMap; + +pub struct RandomizedSet { + mp: HashMap, + arr: Vec, +} + +impl RandomizedSet { + fn new() -> Self { + RandomizedSet { + mp: HashMap::new(), + arr: Vec::new(), + } + } + + fn insert(&mut self, val: i32) -> bool { + let res = !self.mp.contains_key(&val); + if res { + self.mp.insert(val, self.arr.len() as i32); + self.arr.push(val); + } + res + } + fn remove(&mut self, val: i32) -> bool { + let res = self.mp.contains_key(&val); + if res { + let idx = *self.mp.get(&val).unwrap(); + self.mp + .entry(*self.arr.last().unwrap()) + .and_modify(|v| *v = idx); + self.arr.swap_remove(idx as usize); + self.mp.remove(&val); + } + res + } + fn get_random(&self) -> i32 { + *self.arr.choose(&mut rand::thread_rng()).unwrap() + } +} From d482ed58ef6ad371a5f36ca7bc94a3cd57b97ae8 Mon Sep 17 00:00:00 2001 From: Yaseen Khan Date: Sun, 10 Nov 2024 07:49:22 -0700 Subject: [PATCH 2/2] Fixed code file name --- ...ert-delete-getrandom.rs => 0380-insert-delete-getrandom-o1.rs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename rust/{0380-insert-delete-getrandom.rs => 0380-insert-delete-getrandom-o1.rs} (100%) diff --git a/rust/0380-insert-delete-getrandom.rs b/rust/0380-insert-delete-getrandom-o1.rs similarity index 100% rename from rust/0380-insert-delete-getrandom.rs rename to rust/0380-insert-delete-getrandom-o1.rs