Skip to content

Commit 3a242cc

Browse files
authored
Create design-front-middle-back-queue.py
1 parent 1354548 commit 3a242cc

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# Time: O(1)
2+
# Space: O(n)
3+
4+
import collections
5+
6+
7+
class FrontMiddleBackQueue(object):
8+
9+
def __init__(self):
10+
self.__left, self.__right = collections.deque(), collections.deque()
11+
12+
def pushFront(self, val):
13+
"""
14+
:type val: int
15+
:rtype: None
16+
"""
17+
self.__left.appendleft(val)
18+
self.__balance()
19+
20+
def pushMiddle(self, val):
21+
"""
22+
:type val: int
23+
:rtype: None
24+
"""
25+
if len(self.__left) > len(self.__right):
26+
self.__right.appendleft(self.__left.pop())
27+
self.__left.append(val)
28+
29+
def pushBack(self, val):
30+
"""
31+
:type val: int
32+
:rtype: None
33+
"""
34+
self.__right.append(val)
35+
self.__balance()
36+
37+
def popFront(self):
38+
"""
39+
:rtype: int
40+
"""
41+
val = (self.__left or collections.deque([-1])).popleft()
42+
self.__balance()
43+
return val
44+
45+
def popMiddle(self):
46+
"""
47+
:rtype: int
48+
"""
49+
val = (self.__left or [-1]).pop()
50+
self.__balance()
51+
return val
52+
53+
def popBack(self):
54+
"""
55+
:rtype: int
56+
"""
57+
val = (self.__right or self.__left or [-1]).pop()
58+
self.__balance()
59+
return val
60+
61+
def __balance(self):
62+
if len(self.__left) > len(self.__right)+1:
63+
self.__right.appendleft(self.__left.pop())
64+
elif len(self.__left) < len(self.__right):
65+
self.__left.append(self.__right.popleft())

0 commit comments

Comments
 (0)