标题:在一个二维数组中, 每一行都是依照从左到右递加的顺序排列的, 每一列都是依照从上到下递加的顺序排列的。输入一个二维数组和一个整数,判别这个整数是否在二维数组中。如判别7是否在如下二维数组中
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
A8站源码交易平台
思路:二分查找。每次以二维数组的右上角作为判别标志。假如当时数字比方针大,则除掉二维数组当时列,假如当时数字比方针小,则除掉二维数组当时行。(这个当时数字总是获得为方针数字可能在的区域的有上角)
例如上面的二维数组查找7,此刻右上角数字是9,9比7大,所以除掉9地点的列,即在
1 2 8
2 4 9
4 7 10
6 8 11
这个部分矩阵去找7.此刻右上角是8,比7大,除掉8地点的列,在
1 2
2 4
4 7
6 8
里边去找7是否存在,因为2比7 小,除掉2地点的行,在
2 4
4 7
6 8
查找7.因为4比7小,同上,在
4 7
6 8 找。
因为此刻右上角的数字是7,刚好等于查找的数字,回来查找成功。
class Solution {
public:
bool Find(int target, vectorarray)
{
int rows = array.size();//求行数
int columns = array[0].size();//求列数
if(rows == 0 || columns == 0)
return false;
int row = 0,column = columns - 1;
while(row >= 0 && row < rows && column >=0 && column < columns)
{
if(array[row][column] == target)
return true;
else if(array[row][column] < target)
row++;
else
column--;
}
return false;
}