题目要求时间复杂度小于 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;
- }
杨氏矩阵(二维数组的每行从左到右是递增的, 每列从上到下是递增的. 在这样的数组中查找一个数字)
来源: http://www.bubuko.com/infodetail-3038425.html