题目要求时间复杂度小于O(N)

#include<stdio.h>

int find(int arr[][3], int *px, int *py,int key)
{
	int x = 0;
	int y = *py - 1;
	while ((x < *px) && (y >= 0))
	{
		if (arr[x][y] == key)
		{
		//下标由指针带回
			*px = x;
			*py = y;
			return 0;
		}
		else if (arr[x][y] < key)
		{
			x++;
		}
		else
		{
			x++;
			y--;
		}
	}
	*px = -1;
	*py = -1;
}
void print_Arrs(int *arr,int row, int col)//输出函数(指针法)得益于c语言线性存储
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			printf("%d ", arr[i*col + j]);
		}
		printf("\n");
	}

}
int main()
{
	int n;
	int arr[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	print_Arrs((int *)arr, 3, 3);
	int x = 3;
	int y = 3;
	printf("请输入需要查找的数字:\n");
	scanf("%d", &n);
	find(arr,&x,&y,n);
	if (x != -1 && y != -1)
	{
		printf("找到了,下标为%d,%d\n",x,y);
	}
	else
	{
		printf("没找到!\n");
	}
	return 0;
}