Leetcode 1767 Solution

This article provides solution to leetcode question 1767 (design-front-middle-back-queue)

https://leetcode.com/problems/design-front-middle-back-queue

Solution

class FrontMiddleBackQueue:
def __init__(self): self.q1 = deque() self.q2 = deque()
def balance(self): while len(self.q1) > len(self.q2): self.q2.appendleft(self.q1.pop())
while len(self.q1) + 1 < len(self.q2): self.q1.append(self.q2.popleft())
def pushFront(self, val: int) -> None: self.q1.appendleft(val) self.balance()
def pushMiddle(self, val: int) -> None: self.q1.append(val) self.balance()
def pushBack(self, val: int) -> None: self.q2.append(val) self.balance()
def popFront(self) -> int: ans = None
if len(self.q1): ans = self.q1.popleft() elif len(self.q2): ans = self.q2.popleft() else: ans = -1
self.balance() return ans
def popMiddle(self) -> int: ans = None
if len(self.q2) == 0: ans = -1 elif len(self.q1) == len(self.q2): ans = self.q1.pop() else: ans = self.q2.popleft()
self.balance() return ans
def popBack(self) -> int: ans = None
if len(self.q2): ans = self.q2.pop() else: ans = -1
self.balance() return ans
# Your FrontMiddleBackQueue object will be instantiated and called as such: # obj = FrontMiddleBackQueue() # obj.pushFront(val) # obj.pushMiddle(val) # obj.pushBack(val) # param_4 = obj.popFront() # param_5 = obj.popMiddle() # param_6 = obj.popBack()