First Unique Number
https://leetcode.com/explore/featured/card/30-day-leetcoding-challenge/531/week-4/3313/
class Node:
def __init__(self,val):
self.val = val
self.prev = None
self.next = None
class FirstUnique:
def __init__(self, nums: List[int]):
self.d = dict()
self.cnt = 0
self.head = Node(0)
self.tail = Node(0)
self.head.next = self.tail
self.tail.prev = self.head
for num in nums:
self.add(num)
def showFirstUnique(self) -> int:
curr = self.head.next
if self.cnt == 0:
return -1
return curr.val
def add(self, value: int) -> None:
newNode = Node(value)
if value not in self.d:
self.d[value] = newNode
prev = self.tail.prev
prev.next = newNode
newNode.prev = prev
newNode.next = self.tail
self.tail.prev = newNode
self.cnt+=1
else:
if self.d[value] != -1:
self.__remove(self.d[value])
self.d[value] = -1
self.cnt-=1
def __remove(self,node):
prev = node.prev
nxt = node.next
prev.next = nxt
nxt.prev = prevLast updated