【C 剑指offer】有序整型矩阵元素查找 {杨氏矩阵}

目录

        题目内容:

思路:

 图形演示:

 复杂度分析

 C源码:


/** *************************************************************************** ********************                                  ********************* ********************      COPYRIGHT INFORMATION       ********************* ********************                                  ********************* ***************************************************************************                                                                          **                                   _oo8oo_                                **                                  o8888888o                               **                                  88" . "88                               **                                  (| -_- |)                               **                                  0\  =  /0                               **                                ___/'==='\___                             **                              .' \\|     |// '.                           **                             / \\|||  :  |||// \                          **                            / _||||| -:- |||||_ \                         **                           |   | \\\  -  /// |   |                        **                           | \_|  ''\---/''  |_/ |                        **                           \  .-\__  '-'  __/-.  /                        **                         ___'. .'  /--.--\  '. .'___                      **                      ."" '<  '.___\_<|>_/___.'  >' "".                   **                     | | :  `- \`.:`\ _ /`:.`/ -`  : | |                  **                     \  \ `-.   \_ __\ /__ _/   .-` /  /                  **                 =====`-.____`.___ \_____/ ___.`____.-`=====              **                                   `=---=`                                ** *************************************************************************** ********************                                  ********************* ********************      				 ********************* ********************         佛祖保佑 永远无BUG       ********************* ********************                                  ********************* ***************************************************************************/


         整形二维数组内元素查找,简称“杨氏矩阵”,是《剑指offer》上的一道经典的题目。


 


         在之前的一篇文章中,我提出了一共三种解决问题的方法,分别是:

        遍历,二分查找,第三种并不成熟(也就是充分利用二分查找),为了纠正方法三,于是有了这篇文章。

       

        题目内容:

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

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


思路:

        假设要找的元素为 7, 设为 key;

        我们观察到数组的每一行从左到右递增,每一列从上到下递增:

 

经过仔细分析:

         我们可以试着找到思路:

         

也就是说,我们把 未查找区域的右上角元素(记为a)与key比较;(意味着我们将从 row = 0,col = j -1 为初始值,然后开始判断)

        (记行为i,列为j)

        三种可能:

        a等于key——这是最简单也是最理想的情况,key就是最右上角元素,找到 于是返回 1 ;

        a大于key——由于每一列从上到下递增,a大于key说明最右边的一列都大于key,于是最右侧的一列抛弃,j--;

        a小于key——由于每一行从左到右递增,a小于key说明a的左边没有大于key的元素,于是第一行抛弃,i++;

        接下来,得到的仍然是矩阵,于是仍然可以用上述操作再次进行操作;但是需要对行 与 列 进行限制——row <= 最大行号,col >= 0;(根据 列号j-- ,但是不能小于0,行号 i++,但是不能越界访问 确定)

 图形演示:

        (红色框内代表舍弃)

初始状态:

 第一次比较:

 第二次比较:

第三次比较:

 

第四次比较: 

 

 

第五次比较:

 


 复杂度分析

         仅仅5次,就找到了key,其实,可以猜测,当矩阵为n阶方阵时,最坏需要比较(n-1)*2 次,才能得到结果——key在最左下角;或者key不存在。

        最坏的时间复杂度等于O(N),在一般情况下时间复杂度小于O(N),满足要求。

 C源码:


#include<stdio.h>
int Find_int(int arr[][4],int x,int y,int key)
{int i = 0;int j = y-1;//保证坐标的合法性while(i <= x && j >= 0){if( key==arr[i][j] ){return 1;//找到了}else if(arr[i][j] > key){j--;}else if(arr[i][j] < key){i++;}}return 0;//没有找到
}int main()
{int key = 0;scanf("%d",&key);int col = 4,row = 4;int arr[][4] = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};int ret = Find_int(arr,row,col,key);printf("%d",ret);return 0;
}


 完~

转载请注明出处

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

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

相关文章

遥感论文 | Scientific Reports | 一种显著提升遥感影像小目标检测的网络!

论文题目&#xff1a;MwdpNet: towards improving the recognition accuracy of tiny targets in high-resolution remote sensing image论文网址&#xff1a;https://www.nature.com/articles/s41598-023-41021-8 摘要 提出MwdpNet&#xff0c;以提高对高分辨率遥感&#xf…

connect: Network is unreachable问题解决

第一步&#xff1a;查看ifcfg-ens33配置文件 cd /etc/sysconfig/network-scripts/ cat ifcfg-ens33 发现问题&#xff1a;GATEWAY写错成GATWAY 第二步&#xff1a;修改 vim ifcfg-ens33 第三步&#xff1a;检测是否成功 ping baidu.com 成功&#xff01;

Mysql 的ROW_NUMBER() 和分区函数的使用 PARTITION BY的使用

Mysql 的ROW_NUMBER() 和分区函数的使用 PARTITION BY的使用 描述&#xff1a; 遇到了一个需求&#xff0c;需要查询用户id和计划id&#xff0c;但是人员id的是重复&#xff0c;我想把人员id去重&#xff0c;支取一个。自然而然的就想到了 SELECT DISTINCT prj_plan.last_mon…

分布式事务--初识Seata和TC部署

1.Seata介绍 Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。致力于提供高性能和简单易用的分布式事务服务&#xff0c;为用户打造一站式的分布式解决方案。 官网地址&#xff1a;Seata | Seata&#xff0c;其中的文档、播客中提供了大量的使用说明…

Python读写arxml文件

文章目录 前言一、XML简介二、XML文件结构三、Python读取xml文件安装ElementTree库读取xml文件四、Python写入xml文件前言 本文主要通过介绍arxml文件,为后续python脚本开发奠定基础。 arxml是AUTOSAR XML的简称,是一个通用的配置/数据库文件,实质是一个xml文件。 ①更规范…

Mysql查询条件为大于时,不走索引失效场景

如下 where a>1 and b2 是不走索引。 因为a>1 &#xff0c; (这里说的是&#xff0c;a是走了索引&#xff0c;但是b没有走&#xff0c;为什么了&#xff1f;因为b只有在a相同时&#xff0c;b才有序,也就是说这个联合索引只用到了一半)的数据是无序的(1 4 1 2)&#xff0…

WGAN 优势小结

我在上一篇博文为什么 GAN 不好训练中&#xff0c;分析了原始 GAN 难以训练的原因&#xff0c;本篇博文将分析下 WGAN 的优势。 1. Wasserstein 距离 W 是指 Wasserstein&#xff0c;Wasserstein 距离又叫Earth-Mover&#xff08;EM&#xff09;距离。Wasserstein距离相比KL散…

ubuntu18.04 安装yolov5环境及推理环境

文章目录 1、安装anaconda31.2、环境变量配置1.3、添加/更换 conda 清华源 2、安装pytorch1.63、CUDA安装4、安装cuDNN5、安装tensorRT6、安装opencv4.67、tensorRT部署yolov5模型推理 1、安装anaconda3 官方网网址 https://www.anaconda.com/download#downloads去到下载的文…

心理测试网站源码,知己心理React心理健康测试

源码介绍 React心理健康测试网站源码&#xff0c;帮助需要的人更好地了解自已的心理健康状态和人格特征。 React可以在Vite中启用HMR&#xff0c;并且包含了几人EsLint规则。只需要使用react antd-mobile即可 轻松部署完成。

千梦网创:逮住一闪而过的机会疯狂摩擦

我这个人平时想的就多&#xff0c;睡觉也在想事情&#xff0c;有时候睡觉里想的事情往往都是很纯粹的、很绝妙的&#xff0c;但是经常性一醒过来就忘了&#xff0c;再去回忆怎么也想不起来了。 灵感只在特定的环境下产生&#xff0c;这类环境是不可再生和模拟的。 机会只因特…

【C++11特性篇】盘点C++11中三种简化声明的方式【auto】【decltype】【nullptr】(3)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.auto&#xff06;范围for二.decltyp…

用Python快速从深层嵌套 JSON 中找到特定的 Value

有时候&#xff0c;我们拿到一个JSON数据的时候&#xff0c;会难以看出其逻辑层次结构。 这时候就需要我们进行代码解析了。 代码&#xff1a; import jsondef find_json_value(data_json, value, path""):if isinstance(data_json, dict):for k, v in data_json.…

Web 应用程序性能测试核心步骤

通常大家做web 应用程序的时候会有哪些操作呢&#xff1f;今天就来看看常见的web 应用程序的常见操作。 Web 应用程序性能测试核心步骤 1&#xff1a;识别测试环境。确定物理测试环境和生产环境&#xff0c;以及测试团队可用的工具和资源。物理环境包括硬件、软件和网络配置。…

c语言单向链表

看如下代码&#xff0c;这是一个完整的可运行的c源文件&#xff0c;要注意的点&#xff1a; c语言程序运行不一定需要头文件NULL其实是 (void*)0&#xff0c;把指针赋值成(void*)0,就是防止程序员不想该指针被引用的时候被引用&#xff0c;引用地址为0的值程序会引起系统中断&…

PyQt6 QSpacerItem弹簧控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计46条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

00后卷王的自述,我难道真的很卷?

前言 前段时间去面试了一个公司&#xff0c;成功拿到了offer&#xff0c;薪资也从12k涨到了18k&#xff0c;对于工作都还没两年的我来说&#xff0c;还是比较满意的&#xff0c;毕竟一些工作3、4年的可能还没我高。 我可能就是大家说的卷王&#xff0c;感觉自己年轻&#xff…

自动化访客互动:提升网站效益与用户体验的关键优势

在激烈的市场竞争环境中&#xff0c;想抢占市场&#xff0c;获得收益并不容易。每一个订单的完成都要经过一定的销售周期&#xff0c;所以企业可以根据销售周期每个阶段的特点进行优化&#xff0c;留住客户。其中&#xff0c;企业可以在与客户在线互动的过程中&#xff0c;让互…

ShardingSphere-JDBC 和 ShardingSphere-Proxy,你选择哪一个

参考文章 总结&#xff1a; 只使用Java&#xff0c;ShardingSphere-JDBC更好有异构语言的话&#xff0c;ShardingSphere-Proxy 更好混用也挺香

小红书商品详情API:电商助力

一、引言 随着互联网的普及和电商行业的快速发展&#xff0c;消费者对于商品信息的获取方式也在不断变化。小红书作为一款以内容分享为主的社交电商平台&#xff0c;吸引了大量用户。为了满足用户对商品信息的快速获取需求&#xff0c;小红书提供了商品详情API接口。本文将探讨…

Web测试、APP测试常用技巧(错过你一定会后悔)

1. web元素定位七种方式 优先使用的6种 find_element_by_id (返回一个元素)find_element(s)_by_class_name (根据类名获取元素列表)find_element(s)_by_name (根据标签的name属性值返回包含标签对象元素的列表)find_element(s)_by_link_text (根据连接文本获取元素列表)find_…