1.题意
在二维数组中查找目标值
该矩阵具有以下属性:
每行中的整数从左到右排序。
每行的第一个整数大于前一行的最后一个整数。
把矩阵从左到右、从上到下连起来就是一个递增的数组,可以等效成一维数组的查找。
例如示例中的
可以排列为[1, 3, 5, 7, 10, 11, 16, 20, 23, 30, 34, 50]
一维数组中的下标(index)到二位数组的映射(matrix[i][j],假设矩阵有rows行,cols列)关系为
i = index / cols
j = index % cols
2.代码实现
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.empty())
return false;
int rows = matrix.size();
int cols = matrix[0].size();
int start = 0;
int end = rows * cols - 1;
while(start <= end)
{
int mi = start + (end - start) / 2;
if(matrix[mi / cols][mi % cols] == target)
return true;
else if(matrix[mi / cols][mi % cols] < target)
start = mi + 1;
else
end = mi - 1;
}
return false;
}
};
算法的时间复杂度是