[LeetCode][python3]Day28. First Unique Number (30-Day LeetCoding Challenge)
30 days! Lets go Lets go!
N2I -2020.04.28
- My solution
class FirstUnique:
def __init__(self, nums: List[int]):
self.queue=set()
self.uni=OrderedDict()
for i in nums:
self.add(i)
def showFirstUnique(self) -> int:
return next(iter(self.uni.items()))[0] if self.uni else -1
def add(self, value: int) -> None:
if value not in self.queue:
self.uni[value]=True
self.queue.add(value)
elif value in self.uni:
del self.uni[value]
#print(self.queue,self.uni)
Explanation:
If you use an array instead of OrderedDict to record the unique sequence, you will meet time limit in some large test cases.
2. A better Solution
class FirstUnique:
def __init__(self, nums: List[int]):
self.c = Counter(nums)
self.d = deque(nums)
def showFirstUnique(self) -> int:
while self.d and self.c[self.d[0]] != 1:
self.d.popleft()
return self.d[0] if self.d else -1
def add(self, value: int) -> None:
self.c[value] += 1
self.d.append(value)
Explanation:
The solution use collections.Counter
and collections.deque
to find the result.