1.问题描述
在一个二维数组中,每一行按照从左到右的递增顺序排序,每一列按照从上到下的递增的顺序排序,请完成这样一个函数,输入这样的一个二维数组和一个整数,判断数组是否含有该整数。(来自《剑指offer》)
2.分析
首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,那么剔除这个数字所在的列;如果小于要查找的数字,剔除数字所在的行。
另外还需注意,二维数组在内存中也是占据连续空间,在内存中从上到下存储各行元素,同一行按照从左到右的顺序存储。可以根据行列号找到该元素。
int Find(int* matrix,int rows,int columns,int number)
{
int found = 0;
if (!matrix||rows<0||columns<0)
{
return found;
}
int column = columns-1;
int row = 0;
while (column >= 0 && row < rows)
{
if (matrix[column + columns * row] == number)
{
found = 1;
break;
}
else if (matrix[column + columns * row] > number)
{
column --;
}
else
{
row ++;
}
}
return found;
}