题目:
请定义一个队列并实现函数
max_value
得到队列里的最大值,要求函数max_value
、push_back
和pop_front
的均摊时间复杂度都是O(1)。若队列为空,
pop_front
和max_value
需要返回 -1示例 1:
输入: ["MaxQueue","push_back","push_back","max_value","pop_front","max_value"] [[],[1],[2],[],[],[]] 输出: [null,null,null,2,1,2]示例 2:
输入: ["MaxQueue","pop_front","max_value"] [[],[],[]] 输出: [null,-1,-1]限制:
1 <= push_back,pop_front,max_value的总操作数 <= 10000
1 <= value <= 10^5
题目解析:
JAVA:
class MaxQueue {
List<Integer> list;
Integer maxIndex = 0;
public MaxQueue() {
list = new ArrayList<>();
}
public int max_value() {
if (list.size() == 0) {
return -1;
}
if (maxIndex == 0 && list.size() > 0) {
Integer maxIndexTemp = -1;
for (int i = 0; i < list.size(); i++) {
if (maxIndexTemp == -1 || list.get(i) > list.get(maxIndexTemp)) {
maxIndexTemp = i;
}
}
if (maxIndexTemp == -1) {
return -1;
}
maxIndex = maxIndexTemp;
return list.get(maxIndex);
}
return list.get(maxIndex);
}
public void push_back(int value) {
list.add(value);
if (maxIndex > 0 && value > list.get(maxIndex)) {
maxIndex = list.size() - 1;
}
}
public int pop_front() {
if (list.size() == 0) {
return -1;
} else {
if (maxIndex > 0) {
maxIndex = maxIndex - 1;
}
return list.remove(0);
}
}
}
/**
* Your MaxQueue object will be instantiated and called as such:
* MaxQueue obj = new MaxQueue();
* int param_1 = obj.max_value();
* obj.push_back(value);
* int param_3 = obj.pop_front();
*/