杨氏矩阵说明:即一个n*n的矩阵,从左往右依次递增,从上往下依次递增
例如:
就是一个简单的杨氏矩阵现在要查找一个数字是否在该矩阵内部,并且时间复杂度要小于O(N),即不能顺序查找首先观察杨氏矩阵的规律,右上角的元素是本列最小,本行最大。因此只要和右上角的元素进行比较,若被查找元素小于右上角元素,则说明该元素看到不在右上角元素对应的列,则矩阵可以向左缩减列,若被查找元素大于右上角元素,则说明该元素不在右上角元素的同一行,则矩阵可以向下缩减一行,按照这个思路迭代的去比较被查找元素与右上角元素的关系,若在某一次二者相等,则在杨氏矩阵中存在该元素,若找到左下角的元素仍然没有找到该元素,则说明该元素不存在于杨氏矩阵中。
同样的思路可用于左下角的元素
代码实现:
int Find_Num(int arr[3][3], int k, int* row, int* col)//传入一个3*3的矩阵,并传入被查找元素k以及行数的指针,列数的指针
{
int x = 0;
int y = *col - 1;
while (x <= *row - 1 && y >= 0)//循环终止条件,找到了左下角元素
{
if (arr[x][y] > k)
{
y--;//若右上角元素大于被查找元素,则向左列查找
}
if (arr[x][y] < k)
{
x++;//若右上角元素小于被查找元素,则向下行查找
}
else
{
*row = x;//若二者相等,则将该元素的坐标位置返回
*col = y;
return 1;
}
}
return 0;
}
注:传入指针的目的是方便改变外部实参的值,使得外部实参可以获取被查找元素的坐标值
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。