Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
For example,
Consider the following matrix:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
解题思路:寻找2维矩阵中的指定数字,可将矩阵看做一维数组,m行n列,2分查找目标为index, 则行数为[index/m],列数为[index%m],再进行二分查找循环判断,题目较简单,直接写代码:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.empty() || matrix[0].empty()) return false;
int n = matrix.size();
int m = matrix[0].size();
int l = 0, r = m*n - 1;
while(l <= r){
int mid = l + (r - l)/2;
int tar = matrix[mid/m][mid%m];
if(tar > target){
r = mid -1;
}
else if(tar < target){
l = mid + 1;
} else return true;
}
return false;
}