题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:当问题比较复杂时,先通过具体例子找其规律
发现如下规律:
1、首先选取数组中右上角的数字。如果该数字等于要查找的数字,则查找过程结束;
2、如果该数字大于要查找的数字则剔除这个数字所在的列
3、如果该数字小于要查找的数字则剔除这个数字所在的行
直到找到要查找的数字或者不存在该数字。
代码:
class Solution { public: bool Find(int target, vector<vector<int> > array) { int row=0; int col=array[0].size()-1; while(row<array.size()&&col>=0) { if(target<array[row][col]) col--; else if(target>array[row][col]) row++; else return true; } return false; } };
还可以选取左下角的数字(但左上角和右下角不行)
改动的地方有注释
代码:
class Solution { public: bool Find(int target, vector<vector<int> > array) { int row=array.size()-1;//更改 int col=0;//更改 while(row>=0&&col<array[0].size())//更改 { if(target<array[row][col]) row--;//更改 else if(target>array[row][col]) col++;//更改 else return true; } return false; } };