이 질문에 대한 아이디어는 이전 질문과 유사합니다.
1 푸시 할 때 값이 최대 값보다 크고 최대 값 대기열이 지워진 다음이 값이 최대 대기열의 끝에 추가되고 값이 최대 값보다 작습니다. 이 값보다 작은 값을 가진 데이터는 삭제되고이 값은 최대 대기열의 끝에 추가됩니다.
2 팝시 최대 값과 같고 최대 값 대기열의 최대 값이 삭제됩니다.
이 아이디어는 주로 대기열의 특성, 대기열과 창 간의 차이점을 나타냅니다.
창의 팝과 푸시는 동시에 발생하고, 매번 두 가지 작업이 발생하므로 창의 길이는 변경되지 않고 큐의 팝과 푸시는 별도로 발생합니다.
암호:
구현에는 익숙하지 않은 Queue 및 Deque 작업이 포함됩니다. 대답의 코드는 매우 간결합니다.
Deque<Integer> deque = new LinkedList();
Queue<Integer> queue = new LinkedList();
deque.size()
res = deque.peekLast();
deque.removeLast();
deque.addLast(value);
deque.peekFirst()
deque.removeFirst();
deque.addFirst(value);
내 코드
class MaxQueue {
Deque<Integer> deque = new LinkedList();
Queue<Integer> queue = new LinkedList();
public MaxQueue() {
}
public int max_value() {
int res = -1;
if(deque.size() > 0){
res = deque.peekLast();
}
return res;
}
public void push_back(int value) {
if(queue.size() >0){
queue.add(value);
if(value > deque.peekLast()){
while(deque.size()!=0){
deque.removeLast();
}
deque.addLast(value);
}else{
while(deque.size()!=0){
if(value > deque.peekFirst()){
deque.removeFirst();
}else{
break;
}
}
deque.addFirst(value);
}
}else{
queue.add(value);
deque.addLast(value);
}
}
public int pop_front() {
int quepop = -1;
if(queue.size() >0){
quepop = queue.remove();
if(quepop == deque.peekLast()){
while(deque.size()!=0){
if(deque.peekLast()==quepop){
deque.removeLast();
}else{
break;
}
}
}else{
}
}else{
return -1;
}
return quepop;
}
}
답변 코드
class MaxQueue {
Queue<Integer> q;
Deque<Integer> d;
public MaxQueue() {
q = new LinkedList<Integer>();
d = new LinkedList<Integer>();
}
public int max_value() {
if (d.isEmpty()) {
return -1;
}
return d.peekFirst();
}
public void push_back(int value) {
while (!d.isEmpty() && d.peekLast() < value) {
d.pollLast();
}
d.offerLast(value);
q.offer(value);
}
public int pop_front() {
if (q.isEmpty()) {
return -1;
}
int ans = q.poll();
if (ans == d.peekFirst()) {
d.pollFirst();
}
return ans;
}
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/solution/mian-shi-ti-59-ii-dui-lie-de-zui-da-zhi-by-leetcod/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。