File tree Expand file tree Collapse file tree 1 file changed +65
-0
lines changed Expand file tree Collapse file tree 1 file changed +65
-0
lines changed Original file line number Diff line number Diff line change
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 ())
You can’t perform that action at this time.
0 commit comments