有一个数字矩阵,矩阵的每行从左到右是递增的矩阵从上到下是递增的
请编写程序在这样的矩阵中查找某个数字是否存在。
要求:时间复杂度小于O(N)
int Find_Number(int arr[4][4], int k,int* x, int* y)
{
int a = 0;
int b = *y-1;
while (a<*x && b>=0) //a的坐标值不能最大行数,b的坐标值不能小于0
{
//先找右上角进行判断
if (arr[a][b] > k)
{
b--;
}
//再从一列里面进行判断
else if (arr[a][b] < k)
{
a++;
}
else if (arr[a][b] == k)
{
*x = a;
*y = b;
return 1;
}
else
{
return 0;
}
}
}
int main()
{
int arr[4][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16} };
int k =8;
int x = 4;
int y = 4;
int ret = Find_Number(arr,k, &x, &y);
if (ret==1)
{
printf("找到了,坐标为:%d,%d",x,y );
}
else
{
printf("没找着");
}
return 0;
}