剣はOffer-65キューの最大値を指します

//ストレージキュー
Queue <Integer> queue; 
//単調な双方向キュー
Deque <Integer> deque; 

public MaxQueue(){ 
    queue = new LinkedList <>(); 
    deque = new LinkedList <>(); 
} 

public int max_value (){ 
    //空のリターン-1キューの空でないリターンヘッド
    return deque.isEmpty()?-1:deque.peekFirst(); 
} 

public void push_back(int value){ 
    queue.offer(value); 
    / /キュー内の値が現在の値より大きくなるか、キューが空になるまでループで削除します
    while(!deque.isEmpty()&& deque.peekLast()<value){ 
        //キューがそうでない場合emptyの場合、現在の値はキューの最後の値と比較されます
        。Isより大きい場合は、キューの末尾の値を削除しますdeque.removeLast(); 
    } 
    //上記のループを実行した後、キューは空または値が現在の値よりも大きい場合、現在の値がキューに追加されます
    deque.offerLast(value); 
}

public int pop_front(){ 
    //空のreturn -1 
    if(queue.isEmpty()){ 
        return -1; 
    } 
    //データキューの先頭と単調な双方向キューが等しい
    場合if(queue.peek( ).equals(deque。peekFirst())){ 
        // 2つのキューの要素の一貫性を保つために、単調な双方向キューもポップする必要があります
        deque.removeFirst(); 
    } 
    return queue.remove(); 
} 

public static void main(String [] args){ 
    MaxQueue65 obj = new MaxQueue65(); 
    obj.push_back(1); 
    obj.push_back(2); 
    System.out.println(obj.max_value()); 
    System.out.println(obj .pop_front()); 
    System.out.println(obj.max_value()); 
}

おすすめ

転載: blog.csdn.net/a792396951/article/details/114633539