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++代码
|
|