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