描述
请写出一个高效的在m*n矩阵中判断目标值是否存在的算法,矩阵具有如下特征:
每一行的数字都从左到右排序
每一行的第一个数字都比上一行最后一个数字大
例如:
对于下面的矩阵:
[ [1, 3, 5, 9], [10, 11, 12, 30], [230, 300, 350, 500] ]
要搜索的目标值为3,返回true;
示例1
输入:
[[1,3,5,9],[10,11,12,30],[230, 300, 350, 500]],3
返回值:
true
class Solution {
public:
bool searchMatrix(vector<vector<int> > &matrix, int target) {
//Integers in each row are sorted from left to right.
//所以很容易想到二分查找
int row = matrix.size();
int col = matrix[0].size();
int l=0,h=row*col,m;
while(l<h){
m = l+((h-l)>>1);
int i=m/col;
int j=m%col;
if(matrix[i][j]>target){ //取左区间
h=m;
}else if(matrix[i][j]<target){ //取右区间
l=m+1;
}else{ //等于
return true;
}
}
return false;
}
};