class Solution { //难点在于搜索策略需要排除整行或整列来减小时间复杂度,需要注意二维数组的行列和当前坐标的关系
public:
bool Find(int target, vector<vector<int> > array) { //传入数组和目标,返回有无
bool found = false;
int rows = array[0].size(); //获取行数
int cols = array.size(); //获取列数
if ( array.empty() != 1 && rows > 0 && cols > 0 ){
int row = 0;
int col = cols - 1; //从右上角开始
while(row < rows && col >= 0){
if( array[col][row] == target) //找到目标就退出
{
found = true;
break;
}
else{
if( array[col][row] > target){ //如果大于目标
--col; //向前一列搜索
}else{
++row; //小于目标,向后一行搜索
}
}
}
}
return found;
}
};
public:
bool Find(int target, vector<vector<int> > array) { //传入数组和目标,返回有无
bool found = false;
int rows = array[0].size(); //获取行数
int cols = array.size(); //获取列数
if ( array.empty() != 1 && rows > 0 && cols > 0 ){
int row = 0;
int col = cols - 1; //从右上角开始
while(row < rows && col >= 0){
if( array[col][row] == target) //找到目标就退出
{
found = true;
break;
}
else{
if( array[col][row] > target){ //如果大于目标
--col; //向前一列搜索
}else{
++row; //小于目标,向后一行搜索
}
}
}
}
return found;
}
};