1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| class FrontMiddleBackQueue: def __init__(self): self.left = deque() self.right = deque()
def balance(self): if len(self.left) > len(self.right): self.right.appendleft(self.left.pop()) elif len(self.right) > len(self.left)+1: self.left.append(self.right.popleft())
def pushFront(self, val: int) -> None: self.left.appendleft(val) self.balance()
def pushMiddle(self, val: int) -> None: if len(self.left) < len(self.right): self.left.append(val) else: self.right.appendleft(val)
def pushBack(self, val: int) -> None: self.right.append(val) self.balance()
def popFront(self) -> int: if not self.right: return -1 val = self.left.popleft() if self.left else self.right.popleft() self.balance() return val
def popMiddle(self) -> int: if not self.right: return -1 if len(self.left) == len(self.right): return self.left.pop() return self.right.popleft()
def popBack(self) -> int: if not self.right: return -1 val = self.right.pop() self.balance() return val
|