[LeetCode 240] 2DマトリックスIIを検索
Search 2d Matrix Ii
の値を検索する効率的なアルゴリズムを作成します m バツ n マトリックス。このマトリックスには、次のプロパティがあります。
- 各行の整数は、左から右に昇順でソートされます。
- 各列の整数は、上から下に昇順で並べ替えられます。
例:
次のマトリックスについて考えてみます。
5
ターゲット= true
が与えられた場合、20
を返します。
ターゲット= false
が与えられた場合、class Solution { public: bool searchMatrix(vector
分析
このトピックでは、実際には暴力的な検索方法を使用して、質問者の本来の意図ではないと推定しています。行または各行または列のリストをトラバースすると、m * lognまたはn * logmのバイナリ検索時間計算量が実行されます。
私はまた、インターネット上で他の人の巧妙な解決策を見ました。実際、2次元配列の左下隅から始めることができます。 matrix [i] [j]がターゲットよりも大きい場合は、[0、i] [0、j]の範囲を決定できます。この範囲の数は彼よりも少ないので、([i] [j]の左上隅)にターゲットがあってはなりません。次に、右側のターゲット、つまりj ++を探します。 matrix [i] [j]> targetの場合、[i] [j]の右下隅にターゲットがないはずなので、検索します。つまり、i--です。
コード
[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ]
運用効率
実行時間:92ミリ秒、Search a 2D MatrixIIのC ++オンライン送信の35.38%より高速。
メモリ使用量:13 MB、Search a 2D MatrixIIのC ++オンライン送信の5.28%未満。