这题无非是另类的二分,我们运用矩阵坐标变换的法则,就可以将一维的线性坐标映射成的矩阵的二维坐标。映射规则如下:
假设一维坐标为k
,矩阵的行为n
,列为m
。则该一维坐标变换为矩阵坐标的公式为:横坐标:k / m
,纵坐标:k % m
。
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.empty()) return false;
int n = matrix.size(), m = matrix[0].size();
int l = 0, r = n * m - 1;
while(l < r) {
int mid = l + r >> 1;
//这是找的大于等于target区间的左边界
if(matrix[mid / m][mid % m] >= target) r = mid;
else l = mid + 1;
}
//还需要判断一下最后target是否真的存在
return matrix[r / m][r % m] == target;
}
};