Leetcode SQL

380. Insert Delete GetRandom O(1)

Design a data structure that supports all following operations in average O(1) time.

  1. : Inserts an item val to the set if not already present.
  2. : Removes an item val from the set if present.
  3. : Returns a random element from current set of elements (it's guaranteed that at least one element exists when this method is called). Each element must have the same probability of being returned.


// Init an empty set.
RandomizedSet randomSet = new RandomizedSet();
// Inserts 1 to the set. Returns true as 1 was inserted successfully.
// Returns false as 2 does not exist in the set.
// Inserts 2 to the set, returns true. Set now contains [1,2].
// getRandom should return either 1 or 2 randomly.
// Removes 1 from the set, returns true. Set now contains [2].
// 2 was already in the set, so return false.
// Since 2 is the only number in the set, getRandom always return 2.

Logic: Follow the function calls the question sets for us.

A few thins to pay attention:

  1. create self.dataMap and self.dataList. Always use them with “self.” preceding
  2. On the third step, swap the idx and the tail, if idx < len(dataList)
  3. The syntax for idx and tail are idx = self.dataMap[val]; tail = self.dataList.pop()


class RandomizedSet:
def __init__(self):
Initialize your data structure here.
self.dataMap = {}
self.dataList = []

def insert(self, val: int) -> bool:
Inserts a value to the set. Returns true if the set did not already contain the specified element.
if val in self.dataMap:
return False
self.dataMap[val] = len(self.dataList)
return True

def remove(self, val: int) -> bool:
Removes a value from the set. Returns true if the set contained the specified element.
if val not in self.dataMap:
return False
idx = self.dataMap[val]
tail = self.dataList.pop()
if idx < len(self.dataList):
self.dataList[idx] = tail
self.dataMap[tail] = idx
del self.dataMap[val]
return True
def getRandom(self) -> int:
Get a random element from the set.
return random.choice(self.dataList)
# Your RandomizedSet object will be instantiated and called as such:
# obj = RandomizedSet()
# param_1 = obj.insert(val)
# param_2 = obj.remove(val)
# param_3 = obj.getRandom()




My homepage to record my thought processes for solving SQL and Algorithm questions

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store