c语言 - 杨氏矩阵,查找某个数字(思路清晰,代码简洁)(适合刚入坑)

b6f20f614157431ba83ad9378ab10a32.gif

 2d2a17e8ba5149dda2af00a39eca7c2c.png

96fded2715d54a1a9dbf8d591b0f6cc6.png作者简介:一名大一在校生 

1dcdea841dc84e5daf2868d121ca7b4e.png个人主页:月亮嚼成星~

06594baba3894494a77f632d61a0a55d.png个人WeChat:yx1552029968

cf768df40706413e9fef3a992ed367c8.png系列专栏:c语言刷题总结

39190fda869b4100bc23b9d7a235d91c.png每日一句:当暴雨在头顶倾泻时,你只当它是屋檐滴水。

杨氏矩阵

题目:
有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的。
请编写程序在这样的矩阵中查找某个数字是否存在。
要求:时间复杂度小于O(N);

思路:

第一:首先按题目创建一个每行从左到右递增,从上到下是递增的矩阵。
第二:因为时间复杂度小于O(N),所以不能用两个for循环嵌套。要用一个循环。
第三:我们可以从第0行的最后一位元素开始找, 将要查找值与它比较;
第四:查找值大我们就去下一行找(i++),因为这个值已经是本行最大值了;
第五:查找值小我们就往这行前面找(j - -),因为当前值是本行最大值。
找到返回1,未找到返回0.
 

//杨氏矩阵
//从左到右递增
//从上到下递增
#include<stdio.h>

int find(int arr[3][3], int row, int col, int key)
{
	int i = 0;//从第0行
	int j = col - 1;//每一行中最后一个元素,也是最大的元素
	while (i < row && j >= 0)//条件小于第row行,大于等于第0位
	{

		if (key > arr[i][j])
			i++;//下一行
		else if (key < arr[i][j])
			j--;//往前找
		else
			return 1;

	}


	return 0;


}

int main()
{
	
	int arr[3][3] = 
	{ {1,2,3},
	  {4,5,6},
	  {7,8,8}
	};

	int ret = find(arr, 3, 3, 7);//用ret来接受函数的返回值

	if (ret == 1)//判断结果
	{
		printf("find it");
	}
	else
	{
		printf("not find");
	}


	return 0;
}

如上就是本篇的所有知识,如果大家喜欢看此文章并且有收获,可以支持下博主,给博主三连加关注,你的关注是对我最大的鼓励,也是我的创作动力~!

        再次感谢大家观看,感谢大家支持!

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渴望力量的土狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值