中等
给你一个满足下述两条属性的 m x n
整数矩阵:
- 每行中的整数从左到右按非递减顺序排列。
- 每行的第一个整数大于前一行的最后一个整数。
给你一个整数 target
,如果 target
在矩阵中,返回 true
;否则,返回 false
。
题目中的矩阵实质就是一维非递减数组按顺序放进去的,因此可以直接采用二分法查找,这里需要下标简答变换一下即可
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m=matrix.size();
int n=matrix[0].size();
int low=0,high=m*n-1,mid;
while(low<=high){
mid=(low+high)/2;
int hang=mid/n;
int lie=mid%n;
if(matrix[hang][lie]==target){
return true;
}else if(matrix[hang][lie]>target){
high=mid-1;
}else{
low=mid+1;
}
}
return false;
}
};