本题其实就是一个变形的二分查找而已。这里不采用两次二分或者一次二分的方法了,leetcode上是很详细的,这里就讲讲普通的思路是怎样的。
思路:首先就是把二维数组化为一维数组,这个时候一维数组需要开的大一些,不然的话会过不了一些大数据样例。依次把二维数组按行优先输入到一维数组中;
然后,就开始最常规的二分查找就行了。
上代码:
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int index;
int i,j;
int left=0;
int right;
vector<int>num(10100);
int k=0;
for(i=0;i<matrix.size();i++){
for(j=0;j<matrix[0].size();j++){
num[k++]=matrix[i][j];
}
}
right=k-1;
while(left<=right){
int mid=(right+left)/2;
if(num[mid]==target)
return true;
else if(num[mid]>target)
right=mid-1;
else
left=mid+1;
}
return false;
}
};