//杨氏矩阵查找k是否存在 时间复杂数小于O(N),O(N)为穷举法用的时间
int FindNum1(int(*arr)[3], int k, int row, int col)
{
int i = 0;
int j = col - 1;
while(i < row && j > 0)
{
if (arr[i][j] < k)
{
i++;
}
else if (arr[i][j] > k)
{
j--;
}
else
{
return 1;
}
}
//找不到
return 0;
}
int FindNum2(int arr[3][3], int k, int *row, int *col)
{
int x = 0;
int y = *col - 1;
while(x <= *row-1 && y >= 0)
{
if (arr[x][y] < k)//i行右上角最大值小于k 换下一行
{
x++;
}
else if (arr[x][y] > k)//i行右上角最大值大于k 换上一列
{
y--;
}
else
{
//操作x,y的值
*row = x;
*col = y;
return 1;
}
}
//找不到
return 0;
}
int main()
{
int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
int k = 5;
int x = 3;
int y = 3;//返回型参数
//int ret = FindNum1(arr, k, 3, 3);
int ret = FindNum2(arr, k, &x, &y);
if (ret == 1)
{
printf("包含,下坐标是arr[%d][%d]\n", x, y);
}
else
{
printf("不包含");
}
return 0;
}