C语言题目:在杨氏矩阵中,寻找某个数字是否存在

这篇具有很好参考价值的文章主要介绍了C语言题目:在杨氏矩阵中,寻找某个数字是否存在。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C语言题目:杨氏矩阵

C语言题目:在杨氏矩阵中,寻找某个数字是否存在

        这种矩阵,只需要一个二维数组就可以创建,查找时也只需要在二维数组里查找就可以了。

        但是,如果这样查找,尝试过的人都知道,这样就需要使用两个循环,此时的时间复杂度就是0(n²)了。

可是题目要求时间复杂度,为0(n)

如果对时间复杂度不了解可以先看看:

数据结构与算法:时间复杂度_srhqwe的博客-CSDN博客

C语言题目:在杨氏矩阵中,寻找某个数字是否存在

所以就需要使用其他方法:

        不妨先创建一个题目要求的矩形,这样的矩形可以用二维数组创建,为了方便就创建一个3x3的矩形int arr[3][3]={1,2,3,4,5,6,7,8,9};

        并且创建需要找到的数字,因此创建变量int k;并且使用scanf()函数控制变量k;

C语言题目:在杨氏矩阵中,寻找某个数字是否存在

        创建函数sentence()函数,sentence()函数用来寻找这个数字,返回变量是int类型的数组的首元素地址,这个数组内存放了,需要找到的某个数字的下标。

C语言题目:在杨氏矩阵中,寻找某个数字是否存在

         (看完整篇代码再看这里,会放再下面)注意!:未来返回的数组是在函数内部创建的,当这个函数调用完成后,该数组的内存会被释放,此时这块空间就没了。很多保留的方法,这里举例四种:①这里可以用malloc函数,此时的内存空间是动态的,所以会消失 ,②也可以再数组前加static相当于变成全局变量,③又可以再main函数内创建两个指针,让指针指向其中的数组第一个和第二个元素的地址,④还可以像我这上面,将他们的值放到不同的变量中。

         

         并且打印出存放在数组内的位置。

        既然要在数组内找数字,必然需要传入数组和需要找到的数组,即:

       

C语言题目:在杨氏矩阵中,寻找某个数字是否存在

sentence()函数的实现:

        C语言题目:在杨氏矩阵中,寻找某个数字是否存在

        C语言题目:在杨氏矩阵中,寻找某个数字是否存在

        此时,这是我们创建的九宫格。

   

实现原理:

               我们可以通过把每个单元格去掉,从而找到我们需要找到的数字。

       我们可以看题目中九宫格的特征:        C语言题目:在杨氏矩阵中,寻找某个数字是否存在

        那怎么去掉呢?可以定位一个数,这个数的位置在右上角,比如:3这个数字的位置,它的左边比它小,它的下边比它大。如果我们需要找到的这个数字k:

        如果k>3,那么说明我们要找的数在3的下边,那么也就可以去掉上面那一行。

C语言题目:在杨氏矩阵中,寻找某个数字是否存在

        如果k<3,那么说明我们要找的数在3的左边,那么也就可以去掉右边那一列那一。

        C语言题目:在杨氏矩阵中,寻找某个数字是否存在

假如,k=7:

        那么第一次,比较,k>3,则去掉上面一排:

                        C语言题目:在杨氏矩阵中,寻找某个数字是否存在

               第二次,比较,还是选择用到右上角的数字6,k>6,则去掉上面一排:

                                C语言题目:在杨氏矩阵中,寻找某个数字是否存在

                第三次,比较,还是选择用到右上角的数字9,k<9,则去掉右边这一列:

                                         ​​​​​​​C语言题目:在杨氏矩阵中,寻找某个数字是否存在

                 第四次,比较,还有选择右上角的数字8,k<8,则去掉右边这一列:

                                C语言题目:在杨氏矩阵中,寻找某个数字是否存在        

                第五次,比较,还是选择右上角的数字7,k==7,则找到了此时的值

注意:不一定必须要使用右上角这个数字,也可以是左下角,只要可以起到判断作用就行!

        所以得到了:

        C语言题目:在杨氏矩阵中,寻找某个数字是否存在

 代码解释:

        

         先创建了int x,y;用来表示下标(行和列)。x=0,y=2表示的是第一行,第三列,也就是表示右上角这个数字

        进入while循环,其中while循环的条件:

                C语言题目:在杨氏矩阵中,寻找某个数字是否存在

                按照刚刚所说的原理,如果每行每列都一至被去掉,那么如果没找到,就会把整个矩阵去掉。那么如果 整个矩形都去掉了,也就可以让while循环停下了。

                所以while(x <= 2 && y>=0)是将坐标控制在九宫格内。

其中的if语句和原理所说的如出一辙,只要带入原理自然就理清楚代码逻辑了。

        比较重要的是最后的else语句:

              其中,将找到的下标,放在了在函数内部创建的数组的内部。

注意!:未来返回的数组是在函数内部创建的,当这个函数调用完成后,该数组的内存会被释放,此时这块空间就没了。很多保留的方法,这里举例四种:①这里可以用malloc函数,此时的内存空间是动态的,所以会消失 ,②也可以再数组前加static相当于变成全局变量,③又可以再main函数内创建两个指针,让指针指向其中的数组第一个和第二个元素的地址,④还可以像我这上面,将他们的值放到不同的变量中。文章来源地址https://www.toymoban.com/news/detail-400701.html

最终可以看到,时间复杂度为O(n),满足了题目要求。

        

到了这里,关于C语言题目:在杨氏矩阵中,寻找某个数字是否存在的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • js判断对象是否存在某个属性的办法

    在 JavaScript 开发中,判断一个对象是否存某个属性在是非常基础的操作,也是开发者经常需要处理的问题之一。然而,繁琐的代码可能会让我们感到疲惫不堪,因此这里将介绍几种 JavaScript 小技巧,帮助你更高效地判断对象属性的存在性,提高代码效率⏱。 👋 技巧一: 使用

    2024年02月09日
    浏览(74)
  • PostgreSQL 查询json/jsonb是否存在某个片段

    在PostgreSQL中,jsonb有额外的操作符,如 @、@、?、?|、? 可以用来查询是否包含路径/值,以及顶层键值是否存在。 详细文章:PostgreSQL 操作json/jsonb 那么,如果我们不知道路径,只想要查询json/jsonb是否存在某个片段,那就跟我一起来学习吧! 思路:使用 ::text 将json/jsonb转换成为

    2024年02月15日
    浏览(36)
  • 【C语言】每日一题(杨氏矩阵查找数)

    既然在杨氏矩阵中查找数,那什么是杨氏矩阵呢? 矩阵的每行从 左到右是递增 的,矩阵从 上到下是递增 的。 例如: 看到这题我们马上就可以想到 遍历一遍数组 ,但无疑这是效率最低的算法,就不展开详细来讲了 那还有什么样的算法呢? 我们发现这歌矩阵是特殊的: 左

    2024年02月09日
    浏览(40)
  • 代码随想录第六十五天——寻找图中是否存在路径,冗余连接,冗余连接||

    并查集常用来解决连通性问题,主要有两个功能: 将两个元素添加到一个集合中 判断两个元素在不在同一个集合 通过模板可知,并查集主要有三个功能: 寻找根节点,函数:find(int u),也就是判断这个节点的祖先节点是哪个 将两个节点接入到同一个集合,函数:join(int u,

    2024年01月16日
    浏览(49)
  • 如何在Python中查找列表中是否存在某个元素

    如何在Python中查找列表中是否存在某个元素 在Python中,我们经常需要在列表中查找特定的元素。幸运的是,Python提供了多种方法来实现这一目标。下面将介绍几种常见的方法,以帮助您在列表中查找元素。 方法一:使用\\\"in\\\" Python中的列表数据结构已经内置了用于检查元

    2024年02月06日
    浏览(58)
  • 使用js判断list中是否含有某个字符串,存在则删除,

    显示上图中使用了两种方式, 左边的是filter将不等于userCode的元素筛选出来组成一个新的list, 但是上面这个方法在 IE浏览器中不支持 , 所以改成了右边的方法,使用splice: splice传入两个参数,第一个参数是要删除的元素的索引位置,第二个是从这个索引往后删除几个;

    2024年01月24日
    浏览(69)
  • C语言:杨氏矩阵中查找某数(时间复杂度小于O(N))

    有一个 数字矩阵 ( 二维数组 ), 矩阵的 每行从左到右是递增的 , 矩阵从上到下是递增的 , 请编写程序在这样的矩阵中查找某个数字是否存在, 要求: 时间复杂度小于O(N) 。                       =========================================================================            

    2024年02月15日
    浏览(48)
  • 代码随想录| 图论04 查并集 ●查并集理论知识 ●1971.寻找图中是否存在路径 ●684.冗余连接 ●685.冗余连接II

    #查并集理论知识   并查集用处:解决连通性问题 将两个元素添加到一个集合中。 判断两个元素在不在同一个集合 思路:将三个元素A,B,C (分别是数字)放在同一个集合,其实就是将三个元素连通在一起,如何连通:只需要用一个一维数组来表示,即:father[A] = B,fathe

    2024年02月16日
    浏览(43)
  • 【100个 Unity实用技能】☀️ | C# 检查字典中是否存在某个Key的几种方法

    老规矩,先介绍一下 Unity 的科普小知识: Unity 是 实时3D互动内容创作和运营平台 。 包括 游戏开发 、 美术 、 建筑 、 汽车设计 、 影视 在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和

    2023年04月08日
    浏览(49)
  • PHP开发日志 ━━ 不同方法判断某个数组中是否存在指定的键名,测试哪种方法效率高

    我们可以用 isset($arr[\\\'a\\\']) 或者 array_key_exists(\\\'a\\\', $arr) 来判断 \\\'a\\\' 键名是否存在与 $arr 数组。 那么这两种方式哪个运行速度快呢? 不多废话了,现在我们写一段代码来测试一下: 结论是 isset() 更胜一筹。

    2024年02月02日
    浏览(86)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包