C语言 ——— 在杨氏矩阵中查找具体的某个数

目录

何为杨氏矩阵

题目要求

代码实现


何为杨氏矩阵

可以把杨氏矩阵理解为一个二维数组,这个二维数组中的每一行从左到右是递增的,每一列从上到下是递增的


题目要求

在杨氏矩阵中查找具体的某个数

**要求:**时间复杂度小于O(N)


代码实现

复制代码
#include<stdio.h>
int main()
{
	int arr[3][4] = { {1, 2, 3, 4},
					  {5, 6, 7, 8},
					  {9,10,11,12} };

	int input = 0;
	printf("请输入要查找的数:");
	scanf("%d", &input);

	// 二维数组的行数
	int row = sizeof(arr) / sizeof(arr[0]);
	// 二维数组的列数
	int col = sizeof(arr[0]) / sizeof(arr[0][0]);

	// 创建第一行的最后一个元素的下标
	int x = 0;
	int y = col - 1;

	// 查找
	while (y >= 0 && x < row)
	{
		// 二维数组的每一行的最后一个元素和input比较
		if (arr[x][y] < input)
		{
			// 每次去掉一行
			x++;
		}
		else if (arr[x][y] > input)
		{
			// 每次去掉一列
			y--;
		}
		else
		{
			printf("找到了,下标是:%d %d\n", x, y);
			break;
		}
	}

	if (y < 0 || x >= row)
	{
		printf("没找到\n");
	}

	return 0;
}

代码解析:

二维数组的每一行的最后一个元素,都是当前行里最大的,也是当前列里最小的

所以可以通过 input 直接和每一行的最后一个元素比较,当 input 大于当前行的最大的元素时,声明当前行里肯定没有 input ,当 input 小于当前行的最大的元素时,说明 input 可能在当前行,也有可能找不到,再通过控制列来查找 input

代码验证:

查找到时:

没查找到时:

相关推荐
Lzh编程小栈7 分钟前
STM32 DMA深度解析|原理、完整工作流程、寄存器、中断联动,嵌入式面试高频考点(F1系列)
c语言·stm32·单片机·mcu·面试
刃神太酷啦16 分钟前
Redis 核心进阶:哨兵、集群、缓存问题与分布式锁详解----《Hello Redis!》(6)
linux·c语言·数据库·c++·redis·分布式·缓存
luj_17681 小时前
生物体如何应对功能击穿?
c语言·开发语言·c++·经验分享·算法
wuyk5551 小时前
从零吃透 MQTT 通信|第 11 章 MQTT 项目调试验证、性能优化、常见疑难问题、OTA 升级基础
c语言·开发语言·stm32·学习·性能优化
白色的北极熊1 小时前
C 语言 保留 2 位小数并且四舍五入输出
c语言
程序猿阿森3 小时前
C语言预处理完全指南:宏定义、条件编译与头文件规范,一篇搞懂工程化编程
c语言·c++·编译
wuminyu10 小时前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++
Blockbuater_drug12 小时前
FreeSASA: 开源 SASA 计算库,pip 一条命令替代 NACCESS
c语言·开源·sasa·freesasa·溶剂可及表面积·naccess·python api
Logic10112 小时前
C语言/数据结构位运算题解:异或XOR找出蛋糕订单中的“VIP独特口味“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
Logic10113 小时前
C语言/数据结构位运算题解:异或XOR找出飞行棋中的“独特颜色棋子“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质