First Unique Number
You have a queue of integers, you need to retrieve the first unique integer in the queue.
Implement the FirstUnique
class:
FirstUnique(int[] nums)
Initializes the object with the numbers in the queue.int showFirstUnique()
returns the value of the first unique integer of the queue, and returns -1 if there is no such integer.void add(int value)
insert value to the queue.
Python solution
from collections import Counter, OrderedDict
class FirstUnique:
def __init__(self, queue: list[int]):
self.counter = Counter(queue)
self.ordered_dict = OrderedDict()
for key in queue:
if self.counter[key] == 1:
self.ordered_dict[key] = True
def add(self, num: int) -> None:
if num not in self.counter:
self.ordered_dict[num] = True
else:
if num in self.ordered_dict:
self.ordered_dict.move_to_end(num)
self.ordered_dict.popitem()
def showFirstUnique(self) -> int:
if len(self.ordered_dict) != 0:
return next(iter(self.ordered_dict.keys()))
else:
return -1
以上是我个人提供的算法:
- 主要是使用orderedDict。使用ordered container这样可以方便的得到第一个元素;使用dict这样一旦有东西被加进来,使得元素不再unique,可以很方便的去除 (直接delete也是可以的)。
- 由于只有add,没有delete operation,感觉维护一个unique list比较方便而且保证showFirstUnique O(1);如果有delete operation的话,unique有可能会加进来,感觉还不如一开始就维护Ordered list with frequencey (也就是用一个OrderedCounter)。