Menu
CoddyTech

Search a 2D Matrix

ふつう二分探索python iconjava iconcpp iconc iconjs icon+10

m 行 n 列の整数グリッド matrix と、整数 target が与えられます。各行は昇順に並んでおり、各行の先頭の値は、その1つ上の行の末尾の値より大きくなっています。target がグリッド内にあれば true、なければ false を O(log(m × n)) 時間で返してください。

関数

searchMatrix(matrix: integer-2d-array, target: integer) → boolean
matrixinteger-2d-array
行ごとに並べた、行のリストとして与えられるグリッド
targetinteger
探す値
戻り値boolean
target がグリッド内にある場合は true、そうでない場合は false

制約

  • 1 ≤ m, n ≤ 100。ここで、m = matrix.length、n = matrix[i].lengthです。
  • すべての行の長さは同じで、nです。
  • -104 ≤ matrix[i][j], target ≤ 104
  • 各行は厳密な昇順に並んでおり、各行の最初の値は前の行の最後の値より大きくなっています。

例

入力
matrix = [[2, 5, 9, 14], [17, 21, 26, 30], [33, 38, 45, 52]]target = 26
出力
true
説明
行ごとに読むと、12個の値は1つのソート済みリストです。位置0から11を対象に二分探索すると、位置5の21(小さすぎる)、位置8の33(大きすぎる)を確認し、その後、位置6で26を見つけます。
challenge icon

発展問題

行の長さが異なっていても、端から端までソートされているとします。位置を行と列に変換するにはどうすればよいでしょうか。また、検索コストはどのくらいでしょうか。

コードをリセット
def searchMatrix(matrix, target):
    # ここにコードを書いてください

テスト #1

テスト #2

引数

matrix = [[2, 5, 9, 14], [17, 21, 26, 30], [33, 38, 45, 52]]
target = 26

期待される出力

true