杨氏矩阵--简述

首先我想问大家什么是杨氏矩阵?

杨氏矩阵,顾名思义是一个矩阵,它的特殊之处很好理解。

杨氏矩阵从左到右依次增大,从上到下依次增大。

而如果我问你输入一个数字,检验矩阵中是否存在。你会写出什么代码?

可能会有人说直接暴力枚举就好了,遍寻一遍所有的元素,就可以了;显然这种方法是最容易想到的,也是用代码最容易实现的(在这我就不展示了)

但能否有方法更为的简单呢?

当然存在,毕竟这是一种特殊的矩阵,那么我们就从它的性质入手,我们是否可以通过比较每一行的最后一个数,进而达到要找的数以这一行的范围进行比较呢?

当然可以啦,用这种方法可以使我们代码的算法的时间复杂度降低。

现在我们展示代码(很容易理解哦)

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值