二维数组中的查找(模拟)
题目来源https://www.acwing.com/problem/content/16/
思路:刚开始想对目标数在行、列分别进行二分,但感觉这样是有问题的。
由于行列都是递增序列,观察发现如果目标数比当前数小的话,则当前数的左边必定全部比目标数小。而如果大的话,当前数的下边
必定全部比目标数大,从左下角或者右上角开始判断,每次判断都能扫掉一行或一列,时间复杂度o(n+m)。
class Solution {
public:
bool searchArray(vector<vector<int>> array, int target) {
if(array.empty())return false;
int x=0;
int y=array[0].size()-1;
while(x<array.size()&&y>=0){
if(array[x][y]==target){
return true;
}
else if(array[x][y]<target){
x++;
}
else{
y--;
}
}
return false;
}
};