有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。
要求:时间复杂度小于O(N);
#include<stdio.h>
int FindNum2(int arr[][3], int* px, int* py, int k)
{
int x = 0;
int y = *py - 1;
while (x < *px && y >= 0)
{
if (arr[x][y] < k)
{
x++;
}
else if (arr[x][y] > k)
{
y--;
}
else
{
//这里找到了k,此时再将k的坐标赋值带回去
*px = x;
*py = y;
return 1;
}
}
return 0;
}
int main()
{
int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
int k = 7;
int x = 3;//行
int y = 3;//列
//这里的&x,&y的作用是
//1.传入参数
//2.带回值
//这种参数的设计叫做返回型参数
int ret = FindNum2(arr, &x, &y, k);//改进处
if (1 == ret)
{
printf("找到了\n");
printf("%d, %d\n", x, y);
}
else
{
printf("找不到\n");
}
return 0;
}