File tree 4 files changed +57
-44
lines changed
4 files changed +57
-44
lines changed Original file line number Diff line number Diff line change 118
118
119
119
1 . [ 有效的括号] ( /solution/0000-0099/0020.Valid%20Parentheses/README.md )
120
120
1 . [ 最小栈] ( /solution/0100-0199/0155.Min%20Stack/README.md )
121
+ 1 . [ 队列的最大值] ( /lcof/面试题59%20-%20II.%20队列的最大值/README.md )
121
122
1 . [ 用栈实现队列] ( /solution/0200-0299/0232.Implement%20Queue%20using%20Stacks/README.md )
122
123
1 . [ 用队列实现栈] ( /solution/0200-0299/0225.Implement%20Stack%20using%20Queues/README.md )
123
124
1 . [ 逆波兰表达式求值] ( /solution/0100-0199/0150.Evaluate%20Reverse%20Polish%20Notation/README.md )
Original file line number Diff line number Diff line change 44
44
<!-- 这里可写当前语言的特殊实现逻辑 -->
45
45
46
46
``` python
47
+ from collections import deque
48
+
49
+
47
50
class MaxQueue :
48
51
49
52
def __init__ (self ):
50
- self .p = []
51
- self .q = []
53
+ self .p = deque()
54
+ self .q = deque()
52
55
53
56
def max_value (self ) -> int :
54
57
return - 1 if not self .q else self .q[0 ]
55
58
56
59
def push_back (self , value : int ) -> None :
57
60
while self .q and self .q[- 1 ] < value:
58
- self .q.pop(- 1 )
59
- self .q.append(value)
61
+ self .q.pop()
60
62
self .p.append(value)
61
-
63
+ self .q.append(value)
62
64
63
65
def pop_front (self ) -> int :
64
- if not self .p: return - 1
65
- res = self .p.pop(0 )
66
- if res == self .q[0 ]:
67
- self .q.pop(0 )
66
+ if not self .p:
67
+ return - 1
68
+ res = self .p.popleft()
69
+ if self .q[0 ] == res:
70
+ self .q.popleft()
68
71
return res
72
+
73
+
74
+ # Your MaxQueue object will be instantiated and called as such:
75
+ # obj = MaxQueue()
76
+ # param_1 = obj.max_value()
77
+ # obj.push_back(value)
78
+ # param_3 = obj.pop_front()
69
79
```
70
80
71
81
### ** Java**
@@ -74,12 +84,12 @@ class MaxQueue:
74
84
75
85
``` java
76
86
class MaxQueue {
77
-
78
- private Queue<Integer > p = new ArrayDeque<> ();
79
- private Deque<Integer > q = new ArrayDeque<> ();
87
+ private Deque<Integer > p;
88
+ private Deque<Integer > q;
80
89
81
90
public MaxQueue () {
82
-
91
+ p = new ArrayDeque<> ();
92
+ q = new ArrayDeque<> ();
83
93
}
84
94
85
95
public int max_value () {
@@ -90,18 +100,14 @@ class MaxQueue {
90
100
while (! q. isEmpty() && q. peekLast() < value) {
91
101
q. pollLast();
92
102
}
93
- q . addLast (value);
94
- p . add (value);
103
+ p . offerLast (value);
104
+ q . offerLast (value);
95
105
}
96
106
97
107
public int pop_front () {
98
- if (p. isEmpty()) {
99
- return - 1 ;
100
- }
101
- int res = p. poll();
102
- if (res == q. peekFirst()) {
103
- q. pollFirst();
104
- }
108
+ if (p. isEmpty()) return - 1 ;
109
+ int res = p. pollFirst();
110
+ if (q. peek() == res) q. pollFirst();
105
111
return res;
106
112
}
107
113
}
Original file line number Diff line number Diff line change 1
1
class MaxQueue {
2
-
3
- private Queue <Integer > p = new ArrayDeque <>();
4
- private Deque <Integer > q = new ArrayDeque <>();
2
+ private Deque <Integer > p ;
3
+ private Deque <Integer > q ;
5
4
6
5
public MaxQueue () {
7
-
6
+ p = new ArrayDeque <>();
7
+ q = new ArrayDeque <>();
8
8
}
9
9
10
10
public int max_value () {
@@ -15,18 +15,14 @@ public void push_back(int value) {
15
15
while (!q .isEmpty () && q .peekLast () < value ) {
16
16
q .pollLast ();
17
17
}
18
- q . addLast (value );
19
- p . add (value );
18
+ p . offerLast (value );
19
+ q . offerLast (value );
20
20
}
21
21
22
22
public int pop_front () {
23
- if (p .isEmpty ()) {
24
- return -1 ;
25
- }
26
- int res = p .poll ();
27
- if (res == q .peekFirst ()) {
28
- q .pollFirst ();
29
- }
23
+ if (p .isEmpty ()) return -1 ;
24
+ int res = p .pollFirst ();
25
+ if (q .peek () == res ) q .pollFirst ();
30
26
return res ;
31
27
}
32
28
}
Original file line number Diff line number Diff line change
1
+ from collections import deque
2
+
3
+
1
4
class MaxQueue :
2
5
3
6
def __init__ (self ):
4
- self .p = []
5
- self .q = []
7
+ self .p = deque ()
8
+ self .q = deque ()
6
9
7
10
def max_value (self ) -> int :
8
11
return - 1 if not self .q else self .q [0 ]
9
12
10
13
def push_back (self , value : int ) -> None :
11
14
while self .q and self .q [- 1 ] < value :
12
- self .q .pop (- 1 )
13
- self .q .append (value )
15
+ self .q .pop ()
14
16
self .p .append (value )
15
-
17
+ self . q . append ( value )
16
18
17
19
def pop_front (self ) -> int :
18
- if not self .p : return - 1
19
- res = self .p .pop (0 )
20
- if res == self .q [0 ]:
21
- self .q .pop (0 )
20
+ if not self .p :
21
+ return - 1
22
+ res = self .p .popleft ()
23
+ if self .q [0 ] == res :
24
+ self .q .popleft ()
22
25
return res
26
+
27
+
28
+ # Your MaxQueue object will be instantiated and called as such:
29
+ # obj = MaxQueue()
30
+ # param_1 = obj.max_value()
31
+ # obj.push_back(value)
32
+ # param_3 = obj.pop_front()
You can’t perform that action at this time.
0 commit comments