题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:从二维数组的右上角数字作为突破口开始分析(也可以是左下角,但不能是左上角数字或者右下角数字),与查找数字进行比较,比较过程如下表:
当前数字 == 要查找数字 | 查找过程结束,found = true |
---|---|
当前数字 > 要查找数字 | 删除该数字所在列,column减一,继续查找 |
当前数字 < 要查找数字 | 删除该数字所在行,row加一,继续查找 |
核心代码如下:
bool Find(int *matrix, int rows, int columns, int number){
bool found = false;
if(matrix != nullptr && rows > 0 && columns > 0){
int row = 0;
int column = columns - 1;
while(row <= rows && column >= 0){
if(matrix[row * columns + column] == number){
found = true;
break;
}
else if(matrix[row * columns + column] > number){
column--;
}
else
row++;
}
}
return found;
}