杨氏矩阵(二维数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杨氏矩阵(二维数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字)相关的知识,希望对你有一定的参考价值。

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

#include<stdio.h>

int find(int arr[][3], int *px, int *py,int key)
{
    int x = 0;
    int y = *py - 1;
    while ((x < *px) && (y >= 0))
    {
        if (arr[x][y] == key)
        {
        //下标由指针带回
            *px = x;
            *py = y;
            return 0;
        }
        else if (arr[x][y] < key)
        {
            x++;
        }
        else
        {
            x++;
            y--;
        }
    }
    *px = -1;
    *py = -1;
}
void print_Arrs(int *arr,int row, int col)//输出函数(指针法)得益于c语言线性存储
{
    int i = 0;
    int j = 0;
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            printf("%d ", arr[i*col + j]);
        }
        printf("\n");
    }

}
int main()
{
    int n;
    int arr[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    print_Arrs((int *)arr, 3, 3);
    int x = 3;
    int y = 3;
    printf("请输入需要查找的数字:\n");
    scanf("%d", &n);
    find(arr,&x,&y,n);
    if (x != -1 && y != -1)
    {
        printf("找到了,下标为%d,%d\n",x,y);
    }
    else
    {
        printf("没找到!\n");
    }
    return 0;
}

以上是关于杨氏矩阵(二维数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字)的主要内容,如果未能解决你的问题,请参考以下文章

C语言编程 在杨氏数组中查找数字

c语言二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数

杨氏矩阵笔试题讲解

详解扬氏矩阵

详解扬氏矩阵

二维数组中的查找