2次元行列を検索します。質問の意味は、あなたが2次元配列にターゲットを見つけることができるかどうかを尋ね、2次元アレイとターゲットを与えることです。
アイデアは、一次元配列に変換し、二分法に関係する入力です。その後、オーバー変換するため、この問題は、入力が命じた一次元配列であるので、あなたは二分法で行うことができます。例、
例1:
入力: マトリックス= [ [1、3、5、7] [10、11、16、20]、 [23、30、34、50] ] ターゲット= 3 出力:真例2:
入力: マトリックス= [ [1、3、5、7] [10、11、16、20]、 [23、30、34、50] ] 目標= 13 出力:偽
時間O(MNログ)、m及びnは、行列の長さと幅であります
スペースO(1)
1 / * * 2 * @param {数[] []}マトリックス 3 * @param {数}ターゲット 4は、 * @return {ブール} 5 * / 6 のvar searchMatrix = 関数(行列、ターゲット){ 7 // コーナーケース 8 もし(マトリックス=== ヌル || matrix.length === 0 ){ 9 リターン 偽。 10 } 11 12 // 通常の場合 13 LET行= matrix.length。 14 LET COL =行列[0 ] .LENGTH。 15は = 0を始めましょう。 16 LET端=行* COL - 1 。 17 一方(開始<= 端){ 18 LETミッド= Math.floor(+(エンド開始-開始)/ 2 )。 19 LET値=行列[Math.floor(MID / COL)] [Math.floor(MID%のCOL)]。 20 であれば(値=== ターゲット){ 21 リターン 真。 22 } そう であれば(値< 目標){ 23 START =ミッド+ 1 。 24 } 他{ 25 終了=半ば- 1 。 26 } 27 } 28 リターン 偽。 29 }。