タイトル:最大キュー:配列サイズおよびスライディングウィンドウを考えると、すべてのスライディングウィンドウの最大値を見つける
方法:最大ストレージキューの両端ウィンドウインデックスに設けられた開口部と、各ウィンドウは現在のヘッド・オブ・最大値であります値;
スライディングウィンドウたときに、チームに新しい要素は、チームが小さい場合、それは削除されるよりも
両端キュー名は「両端キュー(両端キュー)」の略であります
ArrayList <整数> MaxInWindows1(INT [] NUM、INT サイズ){ のArrayList <整数> =一覧新しい新規のArrayList <整数> (); ArrayDeque <整数> = Q 新しい新しい ArrayDeque <整数> (); IF(NUM == NULL | |サイズ<= 0 ) 戻りリスト; // 配列、キューに追加された配列の添字をループ するための(INT ; I <num.length I ++ I = 0 ){ IF ){(q.isEmpty() q.add (I); } //又はスライディングウィンドウのサイズに等しいよりも第1の位相差以上の現在のインデックス番号とキュー処理要素 IF(I - q.peekFirst()> = サイズ){ q.pollFirst(); // 最初のキューからポップ素子 } // 最後のキュー要素インデックスが多数に割り当てられているよりも、現在処理数 ながら(!q.isEmpty()&& NUM [I]> = NUM [q.peekLast()]){ q.pollLast( ); // キューから最後の要素をポップ } (I)q.add; // キューが配列インデックスに追加される// 第1の最大に対応するリストに追加キュー要素インデックス番号に始めますIF(I> = -size 1。){ List.add(NUM [q.peekFirst()]); } } 戻り値のリスト。 }