题目描述:在一个二维数组中,查找某个数。这个二位数组的每一行和每一列都是递增的。
解决:查找都是从 右上角 的数(该数)开始查询。
如果查找的数==该数,则直接返回true;
如果查找的数 < 该数,则说明要查找的数在该数的左边,那么列数-1;
如果查找的数 > 该数,则说明要查找的数在该数的下边,那么行数+1.
直至查找到这个数。
代码:
bool find(int* matrix,int rows,int columns,int number)
{
if(matrix == NULL || rows<=0 || columns<=0)
{
return false;
}
int row = 0;
int column = columns-1;
while(row < rows && column >= 0)
{
if(matrix[row*columns + column] == number)
{
return true;
}
if(matrix[row*columns + column] < number)
{
row++;
}
else
{
column--;
}
}
return false;
}
主函数:
int main()
{
int rows = 4,columns=3;
int matrix[rows*columns] = {1,2,4,2,4,7,3,5,9,4,7,10};
if(find(matrix,rows,columns,10))
{
printf("find 10\n");
}
else
{
printf("not find 10\n");
}
if(find(matrix,rows,columns,20))
{
printf("find 20\n");
}
else
{
printf("not find 20\n");
}
return 0;
}