【C语言】杨氏矩阵中寻找元素

news2024/12/27 13:06:10

题目名称:

杨氏矩阵

题目内容:

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

形如这样的矩阵就是杨氏矩阵(本质上是一个二维数组)

要求:

时间复杂度小于O(N)

解题思路:

因为题目要求时间复杂度小于O(N),所以我们不能用暴力枚举遍历去解决这道题。

如何去简化时间复杂度呢?

我们首先要知道具体简化的点在哪里,O(N)是因为我们遍历一个一个去排除,最差的情况下,我们需要排除n次,因为遍历一次,排除1个。那我们就有这样的简化思想,遍历一次,可以排除多个元素,这样时间复杂度肯定小于O(N)。

带着这样的思路去想,我们发现最右上角的元素很特殊

因为它是一行中最大的元素,也是一列中最小的元素。

如果比它小,直接排除列。

如果比它大,直接排除行

并且这样的方法可以一直循环下去,直到遍历完整个数组

这也就相当于我们遍历了一个元素,可以排除一行/一列的元素,大大减少了时间复杂度,满足题目要求。

TIP:如何自定义函数返回两个值?

我们知道函数的返回值只能返回一个值,如果题目要求我们返回两个甚至更多的值怎么办呢?

这个时候我们就可以利用函数的参数,我们传参,传我们需要返回参数的地址过去,这样在自定义函数中我们就可以返回我们想要的参数!

源码:

int young_search(int arr[3][3], int row, int col, int k, int* x, int* y)
{
	int ret = 0;
	while (ret < row && col >= 0)
	{
		if (arr[ret][col - 1] == k)
		{
			*x = ret + 1;
			*y = col;
			return 1;
		}
		else if (arr[ret][col - 1] > k)
		{
			col--;
		}
		else
		{
			ret++;
		}
	}
	return 0;
}

int main()
{
	int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
	int k = 2;
	int x = 0;
	int y = 0;
	int ret = young_search(arr, 3, 3, k,&x,&y);
	if (ret == 1)
		printf("找到了,下标是%d,%d", x, y);
	else
		printf("找不到");
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/767044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于51单片机和proteus的八路抢答器系统

此系统是基于51单片机和proteus的仿真设计&#xff0c;功能如下&#xff1a; 1. 分别采集八路抢答器按键输入信号和系统按键信号。 2. 检测到按键输入后蜂鸣器发出提示音。 3. 数码管显示八路中首次按下的按键。 4. 重置按键可重置系统&#xff0c;重新抢答。 功能框图如下…

【文生图系列】stable diffusion webui 汉化(双语)教程

文章目录 安装双语插件下载json源文件设置双语 这篇博文记录于我成功安装双语插件之后&#xff0c;所以以下的示例页面均是双语。汉化教程分为三步&#xff0c;安装插件&#xff0c;JSON源文件下载和最后一步的双语设置。 安装双语插件 在扩展&#xff08;extensions&#xf…

HCIA作业(一)

题目 实现Client1能够通过域名www.baidu.com来获取Serverlet1&#xff08;Http服务器&#xff09;所放置的文件 配置信息 Servlet1配置&#xff1a; PC1配置&#xff1a; PC2配置&#xff1a; Client1配置&#xff1a; Servlet2配置&#xff1a; AR1配置&#xff1a; 结果

ceph集群(二)

ceph 一、资源池 Pool 管理二、创建 CephFS 文件系统 MDS 接口三、创建 Ceph 块存储系统 RBD 接口四、创建 Ceph 对象存储系统 RGW 接口五、OSD 故障模拟与恢复 一、资源池 Pool 管理 上次我们已经完成了 Ceph 集群的部署&#xff0c;但是我们如何向 Ceph 中存储数据呢&#x…

problem(1):VMware网络虚拟编辑器添加VMnet0+IDA远程调试

VMware网络虚拟编辑器添加VMnet0 桥接模式&#xff1a;由于VMnet0是跟桥接模式有关系的&#xff0c;是ping通的条件&#xff0c;所以很重要。是IDA远程调试的 关键&#xff08;remote window debugger&#xff09; NAT模式&#xff1a;外部网络&#xff08;桥接模式&#xff…

Pyhon:串口应用及数据解析过程

Pyhon:串口应用及数据解析过程 串口通信是一种常用的通信协议&#xff0c;本文重点记录在Python中使用串口&#xff0c;并且以一款电源保护板的串口数据协议为例&#xff0c;对其进行解析&#xff0c;记录收发过程中对16进制数据进行转换的过程。 1. 调用串口 在Python中进行…

浅谈HTTPS抓包原理,为什么Charles能够抓取HTTPS报文?

Charles作用其实相当于拦截器&#xff0c;当客户端和服务器通信时&#xff0c;Charles其实会先接收到服务器的证书&#xff0c;但是它会自己生成一个证书发送给客户端(不管是Web端或App应用)&#xff0c;也就是说它不仅仅是拦截&#xff0c;甚至还可以修改。 由于Charles更改了…

[数据结构 -- 手撕排序算法第六篇] 递归实现快速排序(集霍尔版本,挖坑法,前后指针法为一篇的实现方法,很能打)

目录 1、常见的排序算法 1.1 交换排序基本思想 2、快速排序的实现方法 2.1 基本思想 3 hoare&#xff08;霍尔&#xff09;版本 3.1 实现思路 3.2 思路图解 3.3 为什么实现思路的步骤2、3不能交换 3.4 hoare版本代码实现 3.5 hoare版本代码测试 4、挖坑法 4.1 实现…

SpringCloud(六)Config配置中心

一、配置中心 官方文档&#xff1a;**https://docs.spring.io/spring-cloud-config/docs/current/reference/html/ 经过前面的学习&#xff0c;我们对于一个分布式应用的技术选型和搭建已经了解得比较多了&#xff0c;但是如果我们的微服务项目需要部署很多个实例&#xff0c…

基于时域特征和频域特征组合的敏感特征集,再利用SVM或KNN传统分类器进行轴承故障诊断(python编程,代码有详细注释)

1.文件夹介绍&#xff08;使用的是CWRU数据集&#xff09; 0HP-3HP四个文件夹装载不同工况下的内圈故障、外圈故障、滚动体故障和正常轴承数据。 这里以打开0HP文件为例进行展示&#xff0c;creat_data.py是处理原始数据的脚本&#xff0c;负责将原始数据切不重叠割成1024的固…

postgresql导入导出数据库的一些问题

新建一个数据库 别忘了添加空间数据的扩展 备份之前的数据库 注意一定要自定义表&#xff0c;去掉 spatial_ref_sys &#xff0c;要不然需要先drop在创建&#xff0c;可能会报错。 一般不会去导函数&#xff0c;如果有个别自己创建的函数可以手动复制一下&#xff0c;全部导的话…

联合接地的概念和优势——通信设备的“保命秘籍”

夏日炎炎&#xff0c;强对流天气多发&#xff0c;雷电灾害也需要引起关注。雷电是大气中的超长距离放电过程。雷电有着强大的电流、炙热的高温、强烈的电磁辐射以及猛烈的冲击波&#xff0c;这让其能够瞬间变身“无敌破坏王”&#xff0c;造成雷电灾害。如若强大的瞬间过电压冲…

【Python爬虫开发基础⑭】Scrapy架构(组件介绍、架构组成和工作原理)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;python网络爬虫从基础到实战 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a; ⭐️前面比较重要的基础内容&#xff1a; 【Python爬…

【C++】开源:跨平台轻量日志库easyloggingpp

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍跨平台轻量日志库easyloggingpp。 无专精则不能成&#xff0c;无涉猎则不能通。。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&am…

剑指offer16.数值的整数次方

这道题不是easy的难度吗&#xff1f;为什么是 medium&#xff0c;看完题我就想到了用分治法把n除以2&#xff0c;分成两个子问题&#xff0c;然后子问题的解合起来就是这个问题的解&#xff0c;于是立马写了如下代码&#xff1a; class Solution {public double myPow(double …

MySQL(十一):MySQL语法-函数

原始数据 select * from employees where emp_no 10002; select * from salaries where emp_no 10002;--------------------------------------------------------------- | emp_no | birth_date | first_name | last_name | gender | hire_date | -----------------------…

duilib消息产生以及响应机制

1、duilib消息产生处理原理 win32消息产生机制 消息产生。系统将消息排列到其应该排放的线程消息队列中。线程中的消息循环调用GetMessage&#xff08;or PeekMessage&#xff09;获取消息。传送消息TranslateMessage and DispatchMessage to 窗口过程&#xff08;Windows pr…

JavaWeb课程设计项目实战(01)——项目综述

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 项目背景 本项目适合JavaWeb新手作为入门学习的练手案例&#xff0c;主要技术包括&#xff1a; TomcatJSPELJSTLMySQL 该项目是一个学生信息管理系统&#xff0c;主要功能…

300-700题红题第四题和第五题

题目链接&#xff1a;332. 重新安排行程 题目链接&#xff1a;335. 路径交叉 332. 重新安排行程 是写过的详细的在回溯。只能说再写一遍还是磕磕绊绊&#xff0c;但好歹理解的比较快了。 主要就是理解一下回溯的backtrack的输出&#xff0c;不仅仅是可以输出路径的&#xff0…

竹云IDaaS | 全面融合AWS Cognito

AWS Cognito组件用户池User Pool国内暂未上线&#xff0c;身份云IDaaS可完全替代Cognito用户池&#xff0c;借助身份云进行用户身份验证并融合Coginto身份池Identity Pool&#xff0c;实现对AWS资源的无缝安全访问。 企业面临的挑战 AWS Cognito中国站暂未提供用户池User&…