1.特定のトピック
各行と昇順の要素の各列は、行列Kの小さな要素を見つけ、前記n×nの行列所与。それは最初のk小さな並べ替えの要素ではなく、最初のk個の要素であることに注意してください。
例:
=行列[
[1 ,. 5 ,. 9]、
[10 ,. 11、13]、
[12] 15、13である
、]
、K = 8 リターン13。
アイデアの2.分析
二分法:行列の最小要素初期低ポインタ:行列[行-1] [COLS-1]、バイナリ検索、各計算の反復:行列[0] [0]は、ハイポインタがマトリクス状に最大の要素であります行列要素の値はるかに小さい値の中間の、比較結果に応じてロー&高い更新ポインタを有しています。終了条件は、二分探索低い==ハイに設定されて、最終的な結果は、行列値を一定に示すことができます。
3.コード
1 公共 INT kthSmallest(INT [] []行列、int型K){ 2 INTの行= matrix.length。 3 INT COLS =行列[0 ] .LENGTH。 4 INTの低い=行列[0] [0 ]。 5 int型の高=行列[行-1] [COLS-1 ]。 6 一方(低< 高){ 7 int型ミッド=ロー+(高-低)/ 2 。 8 int型のカウント= 0 ; 9 用(INT ; I <行; iが0 = I ++ ){ 10 のため(INT J = 0; J <COLS; J ++ ){ 11 であれば(行列[I] [J] <= MID) 12 カウント++ 。 13 } 14 } 15 であれば(数< K){ 16 ロー=ミッド+ 1 。 17 } 他{ 18 高= ミッド。 19 } 20 } 21 リターン低いです。 22 }