74. 搜索二维矩阵
分析
由于矩阵按行列有序,可以将整个二维矩阵视为一个长度为 n * m
的一维数组,并在这个一维数组上进行二分查找
-
矩阵映射为一维数组:
- 矩阵的第
i
行和第j
列的元素matrix[i][j]
,在一维数组中对应的索引为i * m + j
- 反之,一维数组的索引
k
对应矩阵中的元素为matrix[k / m][k % m]
- 矩阵的第
-
二分查找:
- 初始时,定义查找区间的左右端点为
l = 0
和r = m * n - 1
- 每次取中点
mid
,将其映射到二维矩阵元素matrix[mid / m][mid % m]
,与target
比较:- 若该值大于等于
target
,收缩右边界r = mid
- 若该值小于
target
,收缩左边界l = mid + 1
- 若该值大于等于
- 循环结束时,检查索引
r
对应的矩阵元素是否等于target
- 初始时,定义查找区间的左右端点为
时间复杂度
每次二分查找都会将查找范围缩小为原来的一半,总体复杂度为 O(log(m * n))
空间复杂度
空间复杂度为 O(1)
C++代码
|
|