class Mex: def __init__(self): self.set = {0} self.lowest_missing = 0 def add(self, x): self.set.add(x) if x != self.lowest_missing: return self.lowest_missing for y in range(self.lowest_missing, len(self.set) + 1): if y in self.set: continue else: self.lowest_missing = y return self.lowest_missing return self.lowest_missing if __name__ == "__main__": m = Mex() print(m.add(1)) # 0 print(m.add(3)) # 0 print(m.add(4)) # 0 print(m.add(0)) # 2 print(m.add(5)) # 2 print(m.add(2)) # 6 # m = Mex() # for i in range(10**5): # print(m.add(i))