Menu
CoddyTech

Search a 2D Matrix

中等二分查找python iconjava iconcpp iconc iconjs icon+10

给你一个由整数 matrix 组成的网格,它有 m 行和 n 列,还有一个整数 target。每一行都按升序排列,并且每一行的第一个值都大于上一行的最后一个值。如果网格中出现了 target,则返回 true,否则返回 false,时间复杂度为 O(log(m × n))。

函数

searchMatrix(matrix: integer-2d-array, target: integer) → boolean
matrixinteger-2d-array
网格以行列表的形式给出,并按行排序
targetinteger
要查找的值
返回值boolean
如果目标位于网格中,则为 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 个值构成一个有序列表。对位置 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