当前位置: 首页 > article >正文

C语言初阶习题【29】杨氏矩阵

1. 题目描述——杨氏矩阵

有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。

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

2. 思路

在这里插入图片描述

3. 代码实现1

#include<stdio.h>

void find_k(int arr[3][3], int row, int col, int k)
{
	
	int x = 0;
	int y = col-1;
	int flag = 0;
	while(x <= row - 1 && y >= 0) //行一直增加,但是最大是2,列一直减少,但是最小是0,如果超过这个范围就超出数组范围了
	{
		if (k > arr[x][y])
		{
			x++;
		}
		else if (k < arr[x][y])
		{
			y--;
		}
		else
		{
			printf("找到了,下标是:%d,%d\n",x,y);
			flag = 1;
			break;
		}
	}
	if(flag==0)
	   printf("没找到\n");
}

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

	return 0;
}

在这里插入图片描述

4. 代码实现2

在代码实现1的基础上进行改进,我们把找到元素的下标,也返回出来
这里涉及到我们的函数只有一个返回值,所以我们使用指针来把我们的下标带回来

#include<stdio.h>

int find_k(int arr[3][3], int *row, int *col, int k)
{

	int x = 0;
	int y = *col - 1;
	while (x <= *row - 1 && y >= 0) //行一直增加,但是最大是2,列一直减少,但是最小是0,如果超过这个范围就超出数组范围了
	{
		if (k > arr[x][y])
		{
			x++;
		}
		else if (k < arr[x][y])
		{
			y--;
		}
		else
		{
			*row = x;
			*col = y;
			return 1;
		}
	}
	return 0;
}

int main()
{
	int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
	int k = 7;
	int row = 3;
	int col = 3;
	int ret = find_k(arr, &row, &col, k);
	if (ret == 0)
	{
		printf("找不到!\n");
	}
	else
	{
		printf("找到了,数组下标为(%d,%d)", row, col);
	}
	return 0;
}

在这里插入图片描述


http://www.kler.cn/a/506027.html

相关文章:

  • Jenkinsfile共享库介绍
  • 基于go语言的驾考系统设计与实现
  • EPC建设模式
  • Go语言的数据竞争 (Data Race) 和 竞态条件 (Race Condition)
  • mayavi -> python 3D可视化工具Mayavi的安装
  • C++|CRC校验总结
  • 代码随想录算法训练营day30
  • python爬虫根据需要查找某个链接并保存
  • 阿里云 EMR 发布托管弹性伸缩功能,支持自动调整集群大小,最高降本60%
  • 如何解决 XGBoost 控制台警告:版本不一致导致的模型加载问题
  • day10_Structured Steaming
  • 【MATLAB代码】CV和CA模型组成的IMM(滤波方式为UKF),可复制粘贴源代码
  • 神经网络常见操作(卷积)输入输出
  • 【微服务】SpringBoot 通用异常处理方案使用详解
  • PyTorch使用教程(3)-Tensor包
  • C语言预处理艺术:编译前的魔法之旅
  • 人工智能-机器学习之多分类分析(项目实战二-鸢尾花的多分类分析)
  • git仓库迁移(从一个平台的仓库迁移到另一个平台的仓库)
  • (处理 Kafka 消息积压) - 高吞吐 + 零丢失的阻塞队列实战方案
  • Android 防止每次打开APP都显示启动页
  • 接口传参 data格式和json格式区别是什么
  • 基于Springboot + vue实现的旅游网站
  • LeetCode 3280. 将日期转换为二进制表示
  • HTML常用元素及其示例
  • react中hooks之useEffect 用法总结
  • 嵌入式Linux:什么是进程?