From 644f4f01254b070dde97104a7310427acc2a242f Mon Sep 17 00:00:00 2001 From: Arpit Kumar Jain <46723473+arpitkekri@users.noreply.github.com> Date: Thu, 21 Oct 2021 18:00:55 +0530 Subject: [PATCH] Time: 377 ms (21.25%), Space: 97.3 MB (8.60%) - LeetHub --- .../insert-delete-getrandom-o1.cpp | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/insert-delete-getrandom-o1/insert-delete-getrandom-o1.cpp b/insert-delete-getrandom-o1/insert-delete-getrandom-o1.cpp index 1fb9019..4fef0b3 100644 --- a/insert-delete-getrandom-o1/insert-delete-getrandom-o1.cpp +++ b/insert-delete-getrandom-o1/insert-delete-getrandom-o1.cpp @@ -1,31 +1,48 @@ class RandomizedSet { public: - unordered_set s; + map mp; + vector arr; RandomizedSet() { - s.clear(); + mp.clear(); + arr.clear(); } bool insert(int val) { - if(s.count(val)) + if(mp.count(val)) return false; - s.insert(val); + mp[val] = arr.size(); + arr.push_back(val); return true; } - bool remove(int val) { - if(s.count(val)) { - s.erase(val); + // bool remove(int val) { + // if(mp.count(val)) { + // int lastElt = arr.back(); + // int idx = mp[val]; + // arr[idx] = lastElt; + // mp[lastElt] = idx; + // mp.erase(val); + // arr.pop_back(); + // return true; + // } + // return false; + // } + bool remove(int val) { + if(mp.count(val)) { + int removeIdx = mp[val]; + swap(arr[(int)arr.size()-1], arr[removeIdx]); + mp[arr[removeIdx]] = removeIdx; + mp.erase(val); + arr.pop_back(); return true; } return false; } int getRandom() { - int n = s.size(); - int randNo = rand()%n; - auto itr = s.begin(); - advance(itr, randNo); - return *itr; + int n = arr.size(); + int randIdx = rand()%n; + return arr[randIdx]; } };