有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
1 2 3
2 3 4
3 4 5
1 3 4
2 4 5
4 5 6
1 2 3
4 5 6
7 8 9
#include<stdio.h>
#include<stdlib.h>
#define ROW 3
#define COL 3
int Find(int arr[ROW][COL], int row, int col, int key)
{
int left = 0;
int right = col - 1;
while ((left >= 0) && (right < col))
{
if (arr[left][right] < key)
{
left++;
}
if (arr[left][right] > key)
{
right--;
}
if (arr[left][right] == key)
{
return 1;
}
}
return 0;
}
int main()
{
int arr[ROW][COL] = { 1,2,3,4,5,6,7,8,9 };
int key = 5;
int result = Find(arr, ROW, COL, key);
if (1 == result)
{
printf("找到了!!!\n");
}
if (0 == result)
{
printf("没找到???\n");
}
system("pause");
return 0;
}