Skip to content

Commit 9b5eb0f

Browse files
committed
feat: add python and java solutions to lcof problem: No.059
1 parent c9cdb8b commit 9b5eb0f

File tree

4 files changed

+57
-44
lines changed

4 files changed

+57
-44
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@
118118

119119
1. [有效的括号](/solution/0000-0099/0020.Valid%20Parentheses/README.md)
120120
1. [最小栈](/solution/0100-0199/0155.Min%20Stack/README.md)
121+
1. [队列的最大值](/lcof/面试题59%20-%20II.%20队列的最大值/README.md)
121122
1. [用栈实现队列](/solution/0200-0299/0232.Implement%20Queue%20using%20Stacks/README.md)
122123
1. [用队列实现栈](/solution/0200-0299/0225.Implement%20Stack%20using%20Queues/README.md)
123124
1. [逆波兰表达式求值](/solution/0100-0199/0150.Evaluate%20Reverse%20Polish%20Notation/README.md)

lcof/面试题59 - II. 队列的最大值/README.md

+28-22
Original file line numberDiff line numberDiff line change
@@ -44,28 +44,38 @@
4444
<!-- 这里可写当前语言的特殊实现逻辑 -->
4545

4646
```python
47+
from collections import deque
48+
49+
4750
class MaxQueue:
4851

4952
def __init__(self):
50-
self.p = []
51-
self.q = []
53+
self.p = deque()
54+
self.q = deque()
5255

5356
def max_value(self) -> int:
5457
return -1 if not self.q else self.q[0]
5558

5659
def push_back(self, value: int) -> None:
5760
while self.q and self.q[-1] < value:
58-
self.q.pop(-1)
59-
self.q.append(value)
61+
self.q.pop()
6062
self.p.append(value)
61-
63+
self.q.append(value)
6264

6365
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()
6871
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()
6979
```
7080

7181
### **Java**
@@ -74,12 +84,12 @@ class MaxQueue:
7484

7585
```java
7686
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;
8089

8190
public MaxQueue() {
82-
91+
p = new ArrayDeque<>();
92+
q = new ArrayDeque<>();
8393
}
8494

8595
public int max_value() {
@@ -90,18 +100,14 @@ class MaxQueue {
90100
while (!q.isEmpty() && q.peekLast() < value) {
91101
q.pollLast();
92102
}
93-
q.addLast(value);
94-
p.add(value);
103+
p.offerLast(value);
104+
q.offerLast(value);
95105
}
96106

97107
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();
105111
return res;
106112
}
107113
}

lcof/面试题59 - II. 队列的最大值/Solution.java

+9-13
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
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;
54

65
public MaxQueue() {
7-
6+
p = new ArrayDeque<>();
7+
q = new ArrayDeque<>();
88
}
99

1010
public int max_value() {
@@ -15,18 +15,14 @@ public void push_back(int value) {
1515
while (!q.isEmpty() && q.peekLast() < value) {
1616
q.pollLast();
1717
}
18-
q.addLast(value);
19-
p.add(value);
18+
p.offerLast(value);
19+
q.offerLast(value);
2020
}
2121

2222
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();
3026
return res;
3127
}
3228
}
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,32 @@
1+
from collections import deque
2+
3+
14
class MaxQueue:
25

36
def __init__(self):
4-
self.p = []
5-
self.q = []
7+
self.p = deque()
8+
self.q = deque()
69

710
def max_value(self) -> int:
811
return -1 if not self.q else self.q[0]
912

1013
def push_back(self, value: int) -> None:
1114
while self.q and self.q[-1] < value:
12-
self.q.pop(-1)
13-
self.q.append(value)
15+
self.q.pop()
1416
self.p.append(value)
15-
17+
self.q.append(value)
1618

1719
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()
2225
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()

0 commit comments

Comments
 (0)