杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
1 2 3
2 3 4
3 4 5
思路:要查一个数在此数组中,查到它存在的第一个数字即可。从右上角开始,若查找的数比它小,则向前推一列。若查找的数比它小,则向下加一行。
void Find(int arr[3][3], int *px, int *py, int key)
{
int x = 0;
int y = *py - 1;
while (x < *px && y >= 0)
{
if (arr[x][y] > key)
{
y--;//向前推一列
}
if (arr[x][y] < key)
{
x++;//向下加一行
}
if (arr[x][y]==key)
{
*px = x;
*py = y;
return;
}
}
//若输入了数组中不存在的数字,则返回(-1,-1)
*px = -1;
*py = -1;
}
int main()
{
int arr[3][3] = { { 1, 2, 3 }, { 2, 3, 4 },{3, 4, 5 } };
int x = 3;
int y = 3;
int key=0;
printf("请输入一个数字:")
scanf("%d",&key);
Find(arr, &x, &y,key);
printf("%d,%d\n", x, y);
system("pause");
return 0;
}