使用C语言实现杨氏矩阵并找出数字

        前言

        过了五一假期,咋们经过了一个假期的休息,要继续学习了,不能偷懒哦!!

        今天让我们来看看如何在一个杨氏矩阵中找出自己想找到的数字。

        首先,我们要了解一下杨氏矩阵到底是什么,如果一个矩阵中的每行元素从左到右,从上到下都是递增的,并且它的行和列的长度也是递增的,那么我们可以称这个矩阵为杨氏矩阵。

        来让我们看看今天的题目

        题目描述

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

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

        输入描述:

        无

        输出描述:

        一行,

        题目解析

        我们之前已经了解了杨氏矩阵的概念,在这道题中,其实就是让我们在杨氏矩阵中找到一个数字,但是还有一个要求,是时间复杂度小于O(N),这是什么意思呢?

        时间复杂度解释

        我们把这个杨氏矩阵看作一个二维数组,如果这个数组中有n个元素,你去遍历数组,去找你想要找的那个元素的话,最坏的情况是找n次,如果我们去遍历,我们就叫它的时间复杂度为O(N),时间复杂度讨论的是这个算法最坏的情况下的一个数量级。

        不知道这样说大家能不能理解,这个时间复杂度小于O(N)其实就是告诉我们,不能通过遍历这个数组的方式去找到我们想要找的数字,遍历这个数组的时候时间复杂度是等于O(N)的,我们要去观察杨氏矩阵的规律,使用自己的方式解决问题。

        杨氏矩阵图解

        我们就画一个简单的杨氏矩阵来观察一下它的特点吧

        

        我们发现,在这个杨氏矩阵中,根据杨氏矩阵的特点来看,它又上角的数字是一行里面最大的,又是一列里面最小的,我们可以使用这个特征去写代码。

        基本逻辑

        当我们要去找7这个数字的时候,我们拿3与他比较,发现7比3大,那么3已经是第一行里最大的元素了,我们就可以将第一行排除出去,在其他的元素中找我们要找的数字

        当我们要去找2这个数字的时候,我们还是拿3与他比较,我们发现2比3小,那么这个时候3已经是他自己那一列最小的元素了,这一列就不可能有我们要找的元素,所以可以将有3的这一列给排除,在其他的元素中找我们要找的数字。

        基本逻辑我们清楚了,上代码

        代码展示

        

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void find_k(int arr[3][3], int r, int c, int k)
{int x = 0;int y = c - 1;int flag = 0;//假设找不到元素//当行x下标小于等于2的时候,列元素下标大于等于0的时候进入循环,防止越界while (x<=r-1&&y>=0){//使用右上角元素与k进行比较,如果右上角元素比k小那么行x+1,在下一行里寻找if (arr[x][y] < k){x++;}//右上角元素比k大列减1,排除列else if (arr[x][y] > k){y--;}else{printf("找到了,下标是:%d %d", 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);
}

        代码解析

        我们首先创建二阶矩阵arr,我们按照杨氏矩阵的方式将数组中元素排列完成,假设我们要找的是数字7,创建变量k来接收。

        我们通过函数的方式来寻找k,定义函数find_k,我们将数字arr和行列与要找的元素k作为函数的参数。

        在寻找数字的时候,根据题目要求我们只需要找到矩阵中有这个数字即可,所以我们找到下标,之后打印出来就好,中间我们设置变量flag,假设当flag=0的时候我们找不到这个元素,flag=1我们就找到元素k。

        今天就到这里喽,希望大家可以了解到杨氏矩阵的一些知识并且有所收获,加油!!

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

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

相关文章

概念解析 | ROC曲线:评估分类模型

注1:本文系"概念解析"系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:ROC曲线的含义和绘制 概念解析 | ROC曲线:评估分类模型 第一部分:通俗解释 在我们的日常生活中,经常会遇到需要做出判断和选择的情况。比如,当你收到一封邮件时…

深度学习(算法工程师)最火的就业方向

自动驾驶与智能交通 自动驾驶是深度学习技术的一个重要应用领域&#xff0c;其目标是实现车辆的自主导航和驾驶。自动驾驶系统需要借助深度学习技术来识别交通信号、行人、车辆等环境信息&#xff0c;并做出相应的决策。因此&#xff0c;自动驾驶与智能交通领域的就业方向包括…

WPS二次开发系列:一文快速了解WPS SDK功能场景

作者持续关注 WPS二次开发专题系列&#xff0c;持续为大家带来更多有价值的WPS开发技术细节&#xff0c;如果能够帮助到您&#xff0c;请帮忙来个一键三连&#xff0c;更多问题请联系我&#xff08;QQ:250325397&#xff09; 目录 SDK功能介绍 功能详解&#xff1a; 打开文档…

第十二届蓝桥杯省赛真题 Java B 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: ASC试题 B : 卡片试题 C: 直线试题 D: 货物摆放试题 E: 路径试题 F: 时间显示试题 G: 最少砝码试题 H: 杨辉三角形试题 I: 双向排序试题 J: 括号序列 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;…

echarts指标盘属性概括

echarts指标盘属性概括 代码 有模拟数据可以直接使用const options {animation: true,title: {top: "35%",left: "center",// text: "单元测试覆盖度", // 主标题itemGap: 15,textStyle: {// 主标题样式color: "#666666",fontSize:…

YOLOv5改进 | 独家创新篇 | 利用MobileNetV4的UIB模块二次创新C3(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用MobileNetV4的UIB模块二次创新C3&#xff0c;其中UIB模块来自2024.5月发布的MobileNetV4网络&#xff0c;其是一种高度优化的神经网络架构&#xff0c;专为移动设备设计。它最新的改动总结主要有两点&#xff0c;采用了通用反向瓶…

微同城小程序源码 轻松制作本地生活活动赚钱 带完整的安装代码包以及搭建教程

近年来&#xff0c;本地生活服务市场蓬勃发展&#xff0c;人们对于周边的生活信息、活动资讯等需求日益增长。然而&#xff0c;传统的信息发布方式存在诸多不便&#xff0c;如信息更新不及时、传播范围有限等。微同城小程序源码应运而生。它利用小程序的便捷性和普及性&#xf…

海睿思受邀参加 “走进中节能”研习交流,探索新能源数据治理的创新路径

近日&#xff0c;OceanMind海睿思参加由江苏省企业信息化协会&#xff08;以下简称“苏信会”&#xff09;主办的“走进中节能太阳能科技&#xff08;镇江&#xff09;有限公司”研习交流活动。 海睿思与苏美达、远东控股、隆基乐叶、固德威、上能电气等40多位来自制造业领域的…

04-25 周四 FastBuild重构实践-TLS、全局捕获异常、一键配置

04-25 周四 FastBuild重构实践 时间版本修改人描述04-25V0.1宋全恒新建文档2024年5月6日14:33:16V1.0宋全恒完成文档撰写 简介 由于 04-22 周日 阿里云-瑶光上部署FastBuild过程(配置TLS、自定义辅助命令)描述了重新部署一个FastBuild实例的过程&#xff0c;通过阅读这个&…

怎么设置付费视频课程_在线教育知识付费系统

在信息爆炸的时代&#xff0c;我们每天都被海量的信息包围。然而&#xff0c;真正有价值、能够让我们快速提升的知识&#xff0c;往往隐藏在这些信息的深海之中。今天&#xff0c;我要为大家介绍的&#xff0c;就是这样一份珍贵的宝藏——我们的付费视频课程。 工具/原料 微信…

手把手教你微调Stable Diffusion

温馨提示 关于本文&#xff1a; 本文你可以学习到完整的不使用webui借助lora和dreambooth微调Stable Diffusion的全过程。 手把手教你微调Stable Diffusion生成优弧&#xff0c;但是半失败版&#x1f602; 关于训练&#xff1a; 单卡32GV100进行的微调&#xff0c;因为一些…

【leetcode】数学位数题总结

涉及题型&#xff1a;两数相加问题、大数溢出等 相加问题 根据题意定义rs的数据结构判断是存储方式是正序还是逆序&#xff0c;如果是正序需要反转 比如 123 12 135是正序&#xff0c; 321 21 135是逆序反转的方式&#xff1a;对于可以从后往前遍历的&#xff08;如字符串…

高效工作之软件系统——数据结构登记表

数据结构模板 开发完软件系统后&#xff0c;往往需要进行一些登记——《软件系统数据结构登记表》 然后软件项目有60个表左右&#xff0c;难道需要手动录入&#xff0c;那肯定不可能 工欲善其事必先利其器&#xff01;go。。。同事给的模板是下图 效果图 于是想到 之前使用…

【mysql】mysql导入导出数据详解

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

初中都没念完的我,是怎么从IT这行坚持下去的...

大家好&#xff0c;我是一名二线&#xff08;伪三线&#xff0c;毕竟连续两年二线城市了&#xff09;的程序员。 现阶段状态在职&#xff0c;28岁&#xff0c;工作了10年左右&#xff0c;码农从事了5年左右&#xff0c;现薪资9k左右。如文章标题所说&#xff0c;初二辍学&…

AVL树的原理及其实现

文章目录 前言了解AVL树AVL树的特点AVL树的节点调整方案右单旋为什么要右单旋呢&#xff1f;右单旋代码 左单旋为什么要左单旋&#xff1f;左单旋代码 左右双旋左右双旋之后平衡因子的情况左右双旋代码实现 右左双旋右左双旋代码&#xff1a; 简单测试 前言 回顾我们对于二叉搜…

Altman确认:神秘Chatbot非GPT-4.5,OpenAI搜索引擎即将上线

&#x1f680; Altman确认&#xff1a;神秘Chatbot非GPT-4.5&#xff0c;OpenAI搜索引擎即将上线 摘要&#xff1a;近日&#xff0c;Sam Altman在哈佛大学的演讲中确认&#xff0c;引发广泛猜测的gpt2-chatbot并非OpenAI即将发布的下一代模型GPT-4.5。与此同时&#xff0c;关于…

亚信安慧AntDB:解锁数智化的新时代

亚信安慧AntDB的融合实时的特性使得它在数据库领域独树一帜。传统的数据库系统往往只能追求数据的准确性和一致性&#xff0c;但在实际的业务场景中&#xff0c;这些特性并不能满足企业的需求。AntDB的出现打破了传统束缚&#xff0c;为企业带来了全新的数据处理方式&#xff0…

低代码审计作业平台:引领企业实现审计高效革命

随着信息化时代的深入发展&#xff0c;审计工作面临着前所未有的挑战与机遇。传统的审计方式往往繁琐复杂&#xff0c;效率低下&#xff0c;已无法满足现代企业对高效、准确、智能的审计需求。在这样的背景下&#xff0c;审计作业低代码平台应运而生&#xff0c;以其独特的优势…

B/S模式的web通信(高并发服务器)

这里写目录标题 目标实现的目标 服务器代码&#xff08;采用epoll实现服务器&#xff09;整体框架main函数init_listen_fd函数&#xff08;负责对lfd初始化的那一系列操作&#xff09;epoll_run函数do_accept函数do_read函数内容补充&#xff1a;http中的getline函数 详解do_re…