首先我想问大家什么是杨氏矩阵?
杨氏矩阵,顾名思义是一个矩阵,它的特殊之处很好理解。
杨氏矩阵从左到右依次增大,从上到下依次增大。
而如果我问你输入一个数字,检验矩阵中是否存在。你会写出什么代码?
可能会有人说直接暴力枚举就好了,遍寻一遍所有的元素,就可以了;显然这种方法是最容易想到的,也是用代码最容易实现的(在这我就不展示了)
但能否有方法更为的简单呢?
当然存在,毕竟这是一种特殊的矩阵,那么我们就从它的性质入手,我们是否可以通过比较每一行的最后一个数,进而达到要找的数以这一行的范围进行比较呢?
当然可以啦,用这种方法可以使我们代码的算法的时间复杂度降低。
现在我们展示代码(很容易理解哦)
int Find_num(int arr[3][3], int a, int* b, int* c) {
int x=0, y=*c-1;
while (x<=*b-1&&y>=0) {
if (arr[x][y] >a)
y--;
else if (arr[x][y] < a)
x++;
else
{
*b = x;
*c = y;
return 1;
}
}
return 0;
}
int main() {
int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };//设置数组;
int a,b = 3, c = 3;//a表示要查找的数,b表示行数,c表示列数
scanf("%d",&a);
int ret = Find_num(arr,a, &b, &c);//方便判断
if (ret == 1) {
printf("找到了");
printf("下标为:%d %d", b, c);
}
else printf("未找到");
return 0;
}