Java実装の2次元配列を探す[安全プランを証明します]

タイトル

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

1の矩形を検索するには

1.1説明

矩形の二次元アレイ内の動画、および、分析を見つけるために3点の場合には、アレイから番号を選択し、時間計算量(M * N)O、空間的複雑性O(1)

1.2code

1つの パブリック クラスArrayFind {
 2      プライベート 静的 INT [] [] A。
3   
4      プライベート 静的 INT [] [] initArray(){
 5          のint [] [] A = {{1、2、8、9}、{2、4、9、12}、{4、7、10、13 }
 6                  {6、8、11、15 }}。
7          リターンA。
8      }
 9   
10      プライベート 静的 ボイド検索(int型ターゲット){
 11          ブール FOUND = 12          もし(A!=NULL ){
 13              のint列= 0 14              int型のカラム= A [0] .LENGTH-1 15              int型のキー。
16              一方(行<A.length &&列> = 0 ){
 17                  キー= A [行] [列]。
18                  のSystem.out.println( "今キー=" + キー)
19                  であれば(キー== ターゲット){
 20                      FOUND = 21                      ブレーク;
22                  } そう であれば(キー< ターゲット){
 23                     ++ 行;
24                  } {
 25                      - カラム。
26                  }
 27              }
 28              であれば(実測値){
 29                  のSystem.out.println( "に"+標的+"タージェを見つける" "" +行+
 30                          "!" +コラム+ )。
31              }
 32              {
 33                  のSystem.out.println( "申し訳ありませんが見つかりません!" )。
34              }
 35          }
 36   
37      }
38は  
39      のパブリック 静的 ボイドメイン(文字列[]引数){
 40          // TODO自動生成されたメソッドスタブ
41は          A = initArray();
 42である          (14の検索)、
 43は         
44である  
45      }
 46である  
47  }
 48  
49  ------ ----------
 50免責事項:この記事はCSDNブロガー「トワイライト_は」BY-4.0 CC従って、元の記事にあるSA著作権契約を、再現し、元のソースのリンクと、この文を添付してください。
51オリジナルリンク:HTTPS:// blog.csdn.net/u012091092/article/details/45849445

 

普遍的法則を見つけるために2

2.1説明

開始最後の列から逆方向検索の目標値がこの行の全ての数よりも小さい列の最初の行よりも小さい場合には、各列の最初の行は、列の最小値であり、列の数に等しい見出さが目標値よりも大きい、及び記録COL;

最初の行COLの最初の列から、各行の先頭を見つけ、各列の最初の行は列COL、ダウンリンクの行レコード番号の数に等しい未満の目標値を見つけるために、現在のラインの最大値であり、COL。

Array.lengthと〜0〜COL値対応する行と列の行との間で行われる検索、時間複雑さが(N + M)Oであり、空間的複雑度はO(1)

2.2code

1   公共 ブール検索(int型のターゲット、INT [] []配列){
 2          // 0の空の判定
。3          IF(配列== NULL || 0 ||配列[0] == 0 .LENGTH == Array.lengthとすること) {
 4              リターン falseに5          }
 。6          @ 最初の列の判断1.最初の行のターゲット要素が各列と比較され、
 7つの         // 各列の要素が最小の各列の最初の行である
8。         INT COL = 0 ;
 9          ためINT。I =配列[0] 1-.LENGTH; I> = 0; i-- ){
 10              IF([1ターゲット> =配列] [I]){
 11                 = COLのI;
 12は、                 BREAK 13である             }
 14          }
 15          // ラインで判断2.ターゲットが各行COLの最初の列とを比較し、
 16          // 各行COL行の最初の列は最大である
。17          INTの行= 0 18である         ためINT I = 0、I <ことArray.lengthと; I ++ ){
 19              IF(ターゲット> = 配列[COL] [I]){
 20である                  行= I;
 21である                 BREAK ;
 22である             }
 23がある         }
 24          // 3.target 0〜COLは、行の間にあり、Array.lengthとすること
25         以下のためにINT iが行=、I <Array.lengthと; I ++ ){
 26              のためにINT J = 0であり、j <= COL; J ++ ){
 27                  であれば(配列[I] [J] == ターゲット){
 28                      リターン ;
29                  }
 30              }
 31          }
 32          リターン 33      }

 

おすすめ

転載: www.cnblogs.com/ERFishing/p/11831199.html