フェイス質問五十から九:最大キュー

 

タイトル:最大キュー:配列サイズおよびスライディングウィンドウを考えると、すべてのスライディングウィンドウの最大値を見つける
方法:最大ストレージキューの両端ウィンドウインデックスに設けられた開口部と、各ウィンドウは現在のヘッド・オブ・最大値であります値;
スライディングウィンドウたときに、チームに新しい要素は、チームが小さい場合、それは削除されるよりも

両端キュー名は「両端キュー(両端キュー)」の略であります

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()]); 
              } 
          } 戻り値のリスト。
              

              
              
              
          
     }

 

おすすめ

転載: www.cnblogs.com/niliuxiaocheng/p/12593391.html