Ruka
1 min readApr 29, 2020

[LeetCode][python3]Day28. First Unique Number (30-Day LeetCoding Challenge)

30 days! Lets go Lets go!
N2I -2020.04.28

  1. 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.

Ruka
Ruka

Written by Ruka

HI I’m Ruka. Now a SWE in Taiwan. Contact via email: nayzi9999@gmail.com

No responses yet