Design Front Middle Back Queue LeetCode solution in Python

1
# Runtime: 176 ms (Top 11.57%) | Memory: 14.6 MB (Top 46.27%)
2
class FrontMiddleBackQueue:
3

4
def __init__(self):
5
self.front = deque()
6
self.back = deque()
7

8
def _correct_size(self):
9
while len(self.back) > len(self.front):
10
self.front.append(self.back.popleft())
11

12
while len(self.front) > len(self.back) + 1:
13
self.back.appendleft(self.front.pop())
14

15
def pushFront(self, val: int) -> None:
16
self.front.appendleft(val)
17
self._correct_size()
18

19
def pushMiddle(self, val: int) -> None:
20
if len(self.front) > len(self.back):
21
self.back.appendleft(self.front.pop())
22
self.front.append(val)
23
self._correct_size()
24

25
def pushBack(self, val: int) -> None:
26
self.back.append(val)
27
self._correct_size()
28

29
def popFront(self) -> int:
30
front = self.front if self.front else self.back
31
ret = front.popleft() if front else -1
32
self._correct_size()
33
return ret
34

35
def popMiddle(self) -> int:
36
ret = self.front.pop() if self.front else -1
37
self._correct_size()
38
return ret
39

40
def popBack(self) -> int:
41
back = self.back if self.back else self.front
42
ret = back.pop() if back else -1
43
self._correct_size()
44
return ret

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0