Medium
Smallest Number in Infinite Set — Python
Full explanation · Time ctor: O(1) popSmallest: O(logn) addBack: O(logn) · Space O(n)
# Time: ctor: O(1)
# popSmallest: O(logn)
# addBack: O(logn)
# Space: O(n)
import heapq
# heap
class SmallestInfiniteSet(object):
def __init__(self):
self.__n = 1
self.__lookup = set()
self.__min_heap = []
def popSmallest(self):
"""
:rtype: int
"""
if self.__min_heap:
result = heapq.heappop(self.__min_heap)
self.__lookup.remove(result)
return result
result = self.__n
self.__n += 1
return result
def addBack(self, num):
"""
:type num: int
:rtype: None
"""
if num >= self.__n or num in self.__lookup:
return
self.__lookup.add(num)
heapq.heappush(self.__min_heap, num)