オファー001-次元配列のルックアップを受賞

 

トピック:

(同一の各一次元アレイの長さ)は、上から下に増加する順に、二次元アレイの各列をソートし、ソート昇順の順に左から右へ、各行。完全な機能は、そのような二次元アレイと整数を入力し、配列の整数が含まれているか否かが判断されます。

知識:
2次元配列、検索

 

1つのアイデア:

左から右への2次元マトリクスを、ボトム値の増分へ戻る:プロパティを使用。

1)右(または左下)の角度を探すには、右上隅には、行の最大要素、最小値の列です。

目標値は以下右上要素、列の右上隅削除要素以外である場合、要素は右上よりも大きい場合、(その行要素の右上隅に確かではないターゲット)行の右上隅を削除し、同じリターンtrueの場合。

終了条件2)+随時ループ変数の変更を循環ループに書き込まれています。

3)二次元入力配列が空である検出、検出対象が最小配列/配列が最大値よりも大きい未満であり、プロセスの効率を向上させることができます。

時間計算量:O(COL +行)

コード:

パブリック クラスソリューション{
     パブリック ブール検索(int型のターゲット、INT [] []配列){
         int型の行= Array.lengthと。
        INT COL =配列[0 ] .LENGTH。
        
        // チェック2D配列が空の場合
        であれば(Array.lengthと== 0 ||配列[0] .LENGTH == 0 ){
             戻り 
        } 
 
        であれば(目標<配列[0] [0] || target>に配列[行- 1] [COL - 1 ]){
             戻り 
        } 
        // 右アップコーナーからスタート
        int型curRow = 0 ;
        int型 curCol = COL - 1 一方、(curRow <行&& curCol> = 0 ){
             場合(目標< 配列[curRow] [curCol]){ 
                curCol - 
            } 他の 場合(対象> 配列[curRow] [curCol]){ 
                curRow ++ 
            } {
                 戻り 
            } 
        } 
        を返す 
    } 
}

 

2つのアイデア:

バイナリ検索

時間計算:

O(nlogn)

Oの二次元ルックアップ時間計算(LOGN)の一次元アレイ

おすすめ

転載: www.cnblogs.com/zyrJessie/p/12549904.html