ソートマトリックス中K番目最小数

説明

検索  K行および列の目最小数はマトリックスをソートします。

各行及び行列の各列が増分です。

例1:

Input:
[
  [1 ,5 ,7],
  [3 ,7 ,8],
  [4 ,8 ,9],
]
k = 4
Output: 5

例2:

Input:
[
  [1, 2],
  [3, 4]
]
k = 3
Output: 3

チャレンジ

O *(* klogn)時間、  nは  行列の幅と高さの最大値です。

アイデア:

あなたは、バイナリヒープに使用されるか、またはO(することができるklognの時間の複雑さの問題を解決します)。

ヒープで解決します:

最初の列要素の最初の行に開始して、小さなヒープルートを定義します。

サイクル  K K回、毎時間採取要素は、右へのヒープに要素以下の要素こと  K Kは、応答エレメントにかかる時間です。

前記要素が記録される繰り返し、スタックのニーズに注意を払っていません。


二分法:

バイナリ答え、すなわち、最小および最大間隔からなる初期間隔マトリックス。

ミッド行列のランク間隔バイナリプロセスの中間点をtであると仮定される検索

  • tは==、すなわち、ポイントは、結果のkである場合
  • 、T> Kであれば区間[L、ミッド - 1]に
  • T <K、区間[ミッド+ 1、R]になら
    パブリッククラスソリューション{ 
        / ** 
         * @paramマトリックス:整数の行列
         * @paramのK:アン整数
         * @return:マトリックス内のk番目の最小の数
         * / 
         
        クラス対{ 
            公共のint X、Y、ヴァル。
            公共のペア(int型のx、int型Y、INTヴァル){ 
                this.x = X。
                this.y = Y。
                this.val =ヴァル; 
            } 
        } 
        クラスPairComparator実装コンパレータ<ペア> { 
            パブリックINTは比較(ペア、対B){ 
                a.val返す- b.val。
                } 
        }
            INT [] DY =新しいINT [] {1,0}。 
        公共のint kthSmallest(INT [] []行列、int型K){
            INT [] DX =新しいINT [] {0、1}。
                    IF(next_x <N && next_y <M &&!ハッシュ[next_x] [next_y]){
            INT、N = matrix.length。
            INT、M =マトリックス[0] .LENGTH。
            [] []ハッシュ=新しいブール[n]は[m]を論理値。
            優先度つきキュー<ペア>のminheap =新しい優先度つきキュー<ペア>(K、新しいPairComparator())。
            minHeap.add(新しいペア(0、0、行列[0] [0])); 
    
            用(INTがI = 0、I <K - 1; I ++){ 
                ペアCUR = minHeap.poll()。
                用(INT J = 0であり、j <2、J ++){ 
                    int型next_x = cur.x + DX [J]。
                    INT next_y = cur.y + DY [J]。
                    一対next_Pair新しいペア(next_x、next_y、0)=。
                        next_Pair.val =行列[next_x] [next_y]。
                        minHeap.add(next_Pair)。
                        ハッシュ[next_x] [next_y] = TRUE; 
                    } 
                } 
            } 
            戻りminHeap.peek()ヴァル。
        } 
    }
    

      

おすすめ

転載: www.cnblogs.com/FLAGyuri/p/12078513.html
おすすめ