C语言每日一题】——杨氏矩阵

简介: 杨氏矩阵🙌题目简述:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。要求: 时间复杂度小于O(N);

微信图片_20230427214238.gif

😎博客昵称:博客小梦

😊最喜欢的座右铭:全神贯注的上吧!!!

😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!

😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘微信图片_20230427160707.gif


前言🙌


   哈喽各位友友们😊,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!😘我仅已此文,和大家分享C语言每日一题】——杨氏矩阵~这里利用了数组指针的方法知识, 都是精华内容,可不要错过哟!!!😍😍😍


杨氏矩阵🙌


题目简述:

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

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


解题思路分析: 😍


这里要求 时间复杂度小于O(N);所以利用常规的遍历一遍数组的方法是不满足的。因为遍历数组的时间复杂度是O(N)。


首先认真读题,分析解题思路。因为矩阵的每行从左到右是递增的,矩阵从上到下是递增的,所以第一行的最后一个元素就是这一行的最大值,也是这个元素所在列的最小值。每一行的最后一个元素都是该行的最大值。


第一步就是拿第一行的最后一个元素与我们查找的元素进行大小比较。


如果比我们的 k 要大,在我说明该元素一定在该行上,或者不存在 。让 j - - ,对该行逐个逐个进行两两比较 。

如果比我们的 k 要小,在我说明该元素一定在下一行上,或者不存在 。让 i + + ,对该列逐个逐个进行两两比较 。


然后循环重复上述操作,直到找到元素后,再跳出循环。-这里定义一个flag 变量目的是为了将没有找到元素的信息打印出来,这也是题目的要求之一**


按照这种方法时间复杂度是小于O(N)。


画图分析: 😍


微信图片_20230428143514.png


解题源码分享: 😍


#include<stdio.h>
void Find(int(*a)[3], int row, int col,int k)
{
    int i = 0;
    int flag = 0;
    int j = col - 1;
    while ((i>= 0 && i <= row - 1) && (j >= 0 && j <= col - 1) )
    {
        if (*(*(a + i) + j) > k)
        {
            j--;
        }
        else if(*(*(a + i) + j) < k)
        {
            i++;
        }
        else
        {
            flag = 1;
            printf("找到了元素,其下标为:%d ,%d\n", i, j);
            break;
        }
    }
    if(flag == 0)
    printf("找不到该元素\n");
}
int main()
{
    int a[3][3] = { {1,2,3},{4,5,6}, {7,8,9} };
    int row = sizeof(a[0]) / sizeof(int);
    int col = sizeof(a) / sizeof(a[0]);
    int k = 0;
    scanf("%d", &k);
    Find(a,row,col,k);
    return 0;
}


程序输出结果验证: 😊


微信图片_20230428143622.png


总结撒花💞


   本篇文章旨在分享C语言详解C语言每日一题】——杨氏矩阵。希望大家通过阅读此文有所收获!😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘


相关文章
|
4天前
|
算法 C语言
C语言:杨氏矩阵、杨氏三角、单身狗1与单身狗2
C语言:杨氏矩阵、杨氏三角、单身狗1与单身狗2
23 0
|
4天前
|
C语言
C语言--杨氏矩阵
C语言--杨氏矩阵
13 0
|
10月前
|
C语言
C语言:杨氏矩阵中查找某数(时间复杂度小于O(N))
题目: 有一个数字矩阵(二维数组), 矩阵的每行从左到右是递增的, 矩阵从上到下是递增的, 请编写程序在这样的矩阵中查找某个数字是否存在, 要求:时间复杂度小于O(N)。
232 1
|
10月前
|
C语言
C语言之每日一题——杨氏矩阵
C语言之每日一题——杨氏矩阵
|
4天前
|
C语言
C语言第四十六弹---最快方法找到杨氏矩阵中的数下标
C语言第四十六弹---最快方法找到杨氏矩阵中的数下标
|
6月前
|
存储 算法 C语言
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
53 0
|
9月前
|
算法 C语言
C语言杨氏矩阵
C语言杨氏矩阵
43 0
|
9月前
|
存储 C语言
【C语言练习】杨氏矩阵、杨辉三角
【C语言练习】杨氏矩阵、杨辉三角
49 0
|
10月前
|
算法 C语言
【C语言每日一题】杨氏矩阵(源码以及改进源码)
【C语言每日一题】杨氏矩阵(源码以及改进源码)
51 0
c语言 - 杨氏矩阵,查找某个数字(思路清晰,代码简洁)(适合刚入坑)
c语言 - 杨氏矩阵,查找某个数字(思路清晰,代码简洁)(适合刚入坑)
c语言 - 杨氏矩阵,查找某个数字(思路清晰,代码简洁)(适合刚入坑)