C语言实现在杨氏矩阵中查找数字

栏目: C · 发布时间: 6年前

内容简介:题目:杨氏矩阵(一个二维数组,数组的每行从左到右是递增的,每列从上到下是递增的)在这样的数组中查找一个数字是否存在。

题目:

杨氏矩阵(一个二维数组,数组的每行从左到右是递增的,每列从上到下是递增的)

在这样的数组中查找一个数字是否存在。

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

主要思路:

题目要求时间复杂度度不能大于O(N),所以判断次数必须小于遍历一次数组次数。

所以从数组的右上角开始判断,若当前元素大于要查找的数字,则跳过当前列查询下一列,若当前元素小于要查找的数,则跳过当前行查找下一行,直至找到或者找不到。

eg:

此处使用数组arr[3][3]={1,2,3,4,5,6,7,8,9};

1 2 3

4 5 6

7 8 9

在数组中朝查找5,首先判断3<5,则查找范围就变成了

4 5 6

7 8 9

再判断6>5,则查找范围又变为了

4 5

7 8

这时候再判断5=5

则找到

源代码:

#include<stdio.h>
#include<stdlib.h>
void find(int arr[][3],int *row, int *col,int key)
{
    int x = 0;
    int y = *col - 1;
    while (x <*row&&y>0)//判断条件
    {
        if (arr[x][y] == key)//找到
        {
            *row = x;
            *col = y;
            return;
        }
        else if (arr[x][y] < key)
        {
            x++;//变换行
        }
        else
        {
            y--;//变换列
        }
    }
    *row = -1;
    *col = -1;
}
int main()
{
    int arr[3][3]= {1,2,3,4,5,6,7,8,9};
    int x=3;
    int y=3;
    int *row = &x;
    int *col = &y;
    int key=5;
    find(arr,row,col,key);
    if (*row == -1 && *col == -1)
    {
        printf("没找到\n");
    }
    else
    {
        printf("找到了,下标为%d %d\n", *row, *col);
    }
    system("pause");
    return 0;
}

C语言实现在杨氏矩阵中查找数字

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2019-04/158372.htm


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++ Primer 中文版(第 4 版)

C++ Primer 中文版(第 4 版)

Stanley B.Lippman、Josée LaJoie、Barbara E.Moo / 李师贤、蒋爱军、梅晓勇、林瑛 / 人民邮电出版社 / 2006 / 99.00元

本书是久负盛名的C++经典教程,其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,已经帮助全球无数程序员学会了C++。本版对前一版进行了彻底的修订,内容经过了重新组织,更加入了C++ 先驱Barbara E. Moo在C++教学方面的真知灼见。既显著改善了可读性,又充分体现了C++语言的最新进展和当......一起来看看 《C++ Primer 中文版(第 4 版)》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具