ACwing15: 二维数组的查找
算法流程:首先选取数组右上角的数字,如果该数字等于要查找的数字,则查找过程结束。如果该数字大于要查找的数字,那么剔除该数字所在的列;如果该数字小于要查找的数字,则剔除这个数字所在的行,也就是我们每次要查找的数字都是右上角那个数字,如果不相等,那么剔除一行或者一列,这样每一步都可以缩小查找的范围。注意程序的鲁棒性
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if(matrix.size() == 0) return false;
// 首先取出行数 列数
int m = matrix.size(),n = matrix[0].size();
if(m == 0 || n == 0)
{
return false;
}
int i = 0,j = n - 1;
while(i < m && j >= 0)
{
if(matrix[i][j] == target)
{
// 首先取出矩阵右上角的数字 比较target
return true;
}
else if(matrix[i][j] > target)
{
// 删除这一列
j--;
}
else{
i++;// 删除这一行
}
}
return false;
}
};