Skip to content

Commit 8ca9cf0

Browse files
authored
Update MaxQueue.java
修复MaxQueue错误
1 parent 59205b8 commit 8ca9cf0

File tree

1 file changed

+32
-38
lines changed

1 file changed

+32
-38
lines changed

code/offer/src/Chap6/MaxQueue.java

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,50 @@
11
package Chap6;
22

33
import java.util.Deque;
4+
import java.util.Queue;
45
import java.util.LinkedList;
56

67
/**
78
* 定义一个队列,实现max方法得到队列中的最大值。
89
* 要求入列、出列以及邱最大值的方法时间复杂度都是O(1)
910
*/
1011
public class MaxQueue {
11-
private Deque<Integer> maxDeque = new LinkedList<>();
12-
private Deque<Integer> dataDeque = new LinkedList<>();
13-
14-
public void offer(int number) {
15-
dataDeque.offerLast(number);
16-
// 即将要存入的元素比当前队列最大值还大,存入该元素
17-
if (maxDeque.isEmpty() || number > maxDeque.peekFirst()) maxDeque.offerFirst(number);
18-
// 即将要存入的元素不超过当前队列最大值,再将最大值存入一次
19-
else maxDeque.offerFirst(maxDeque.peekFirst());
20-
}
2112

22-
public void poll() {
23-
if (dataDeque.isEmpty()) throw new RuntimeException("队列已空");
24-
dataDeque.pollFirst();
25-
maxDeque.pollFirst();
13+
private Queue<Integer> queue;
14+
private Deque<Integer> maxQueue;
15+
16+
17+
public MaxQueue() {
18+
queue = new LinkedList<>();
19+
maxQueue = new LinkedList<>();
2620
}
2721

28-
public int max() {
29-
if (maxDeque.isEmpty()) throw new RuntimeException("队列已空");
30-
return maxDeque.peekFirst();
22+
public int max_value() {
23+
if (maxQueue.isEmpty()) {
24+
return -1;
25+
}
26+
return maxQueue.peekFirst();
3127
}
3228

33-
public static void main(String[] args) {
34-
MaxQueue maxQueue = new MaxQueue();
35-
maxQueue.offer(2);
36-
maxQueue.offer(3);
37-
maxQueue.offer(4);
38-
maxQueue.offer(2);
39-
maxQueue.offer(6);
40-
maxQueue.offer(2);
41-
maxQueue.offer(5);
42-
maxQueue.offer(1);
43-
44-
System.out.println(maxQueue.max());
45-
maxQueue.poll();
46-
maxQueue.poll();
47-
maxQueue.poll();
48-
maxQueue.poll();
49-
System.out.println(maxQueue.max());
50-
maxQueue.poll();
51-
System.out.println(maxQueue.max());
52-
maxQueue.poll();
53-
System.out.println(maxQueue.max());
29+
public void push_back(int value) {
30+
queue.offer(value);
31+
while (!maxQueue.isEmpty() && value > maxQueue.peekLast()) {
32+
maxQueue.pollLast();
33+
}
34+
maxQueue.offerLast(value);
5435

5536
}
37+
38+
public int pop_front() {
39+
if (queue.isEmpty()) {
40+
return -1;
41+
}
42+
int tmp = queue.poll();
43+
if (tmp == maxQueue.peekFirst()) {
44+
maxQueue.pollFirst();
45+
}
46+
return tmp;
47+
}
48+
5649
}
50+

0 commit comments

Comments
 (0)