杨氏矩阵
有一个二维数组.数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
1 2 3
2 3 4
3 4 5
有一个二维数组.数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
1 2 3
2 3 4
3 4 5
1 3 4
2 4 5
4 5 6
4 5 6
#include<stdio.h> #pragma warning(disable:4996) #define ROW 3 #define COL 3 int search(int arr[][COL], int k, int row, int col) { int x = 0; int y = col - 1; while ( x<row && y >= 0)//key与右上角的数比较,行减1,列减一,直到找到左下角的数 { if (k > arr[x][y]) { x++; } else if (k == arr[x][y]) { return 1; } else { y--; } } return 0; } int main() { int arr[ROW][COL] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int key; printf("PLease input a number:\n"); scanf("%d",&key); int ret = search(arr, key, ROW, COL); if (1 == ret) { printf("找到了\n"); } else { printf("找不到\n"); } system("pause"); return 0; }