二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
array.size()//返回二维数组的行数
array[0].size()//返回二维数组的列数
思路一:逐层遍历
代码:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
for(int i =0;i<array.size();i++){
for(int j=0;j<array[0].size();j++)
{
if(array[i][j]==target){
return true;
}
}
}
return false;
}
};
时间复杂度:O(n2)
思路二:左下角开始查找
由于数组从左到右递增,从上到下递增,于是选择从左下角开始比较,一次能判断除一行或者一列。
代码:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int rows = array.size();//行的数量
int cols = array[0].size();//列的数量
if(!rows||!cols){//判空
return false;
}
int row = rows-1;//最后一行的下标
int col = 0;//最左边一列的下标
while(row>=0&&col<cols){
int current = array[row][col];
if(current==target){
return true;
}else if(current>target){//目标比当前小,向上找
row--;
}else{//目标比当前大,向右找
col++;
}
}
return false;
}
};
时间复杂度:O(M+N)
博主是一个萌新,欢迎大佬们来提出改进建议!