C语言杨氏矩阵中查找元素的示例代码

 更新时间:2023年07月19日 08:26:55   作者:可涵不会debug  
本文主要介绍了C语言杨氏矩阵中查找元素的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

题目名称:

杨氏矩阵

题目内容:

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

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

要求:

时间复杂度小于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--;
        }

到此这篇关于C语言杨氏矩阵中寻找元素的示例代码的文章就介绍到这了,更多相关C语言杨氏矩阵寻找元素内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言解3元1次方程组 用初中学的最基本的联合消元法

    C语言解3元1次方程组 用初中学的最基本的联合消元法

    最近就想自己能不能先写个算线性方程组的程序呢?后来就想了这么个方法,暂时只能算3元的,任意元的接下来继续想。有太多硬编码,希望有兴趣的读者可以给点修改建议
    2013-11-11
  • C++ 中类的拷贝、赋值、销毁的实例详解

    C++ 中类的拷贝、赋值、销毁的实例详解

    这篇文章主要介绍了C++ 中类的拷贝、赋值、销毁的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • 详解C语言数组灵活多变的访问形式

    详解C语言数组灵活多变的访问形式

    这篇文章主要介绍了详解C语言数组灵活多变的访问形式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C语言的字符函数和字符串函数详解

    C语言的字符函数和字符串函数详解

    这篇文章主要为大家介绍了C语言的字符函数和字符串函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • C++ Boost Xpressive示例分析使用

    C++ Boost Xpressive示例分析使用

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-11-11
  • C++ 中 const 和 static 关键字用法及定义

    C++ 中 const 和 static 关键字用法及定义

    本文给大家介绍C++中const和static 关键字用法及定义,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-09-09
  • Qt多线程安全更新QLabel的实现

    Qt多线程安全更新QLabel的实现

    本文主要介绍了Qt多线程安全更新QLabel的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-02-02
  • Qt中树形控件Tree Widget的使用方法汇总

    Qt中树形控件Tree Widget的使用方法汇总

    最近小编在研究Tree Widget树形控件的相关知识,这种控件其实有时还是很有用处的,我主要利用的是带有复选框的树形控件,下面通过实例代码给大家介绍下Qt中树形控件Tree Widget的一些使用方法,感兴趣的朋友一起学习吧
    2021-11-11
  • 教你用Matlab制作黄金矿工小游戏

    教你用Matlab制作黄金矿工小游戏

    黄金矿工作为经典的单机小游戏,一直深受大家的喜爱。本文将用Matlab制作这一款经典的游戏,文中的实现步骤讲解详细,感兴趣的可以了解一下
    2022-03-03
  • C语言模拟实现库函数详解

    C语言模拟实现库函数详解

    C语言库函数是把自定义函数放到库里,是别人把一些常用到的函数编完放到一个文件里,供程序员使用,下面让我们一起来详细了解它
    2022-07-07

最新评论