在杨氏矩阵中判断一个数是否存在

来源:互联网 发布:广东人狐臭 知乎 编辑:程序博客网 时间:2024/04/26 04:05

杨氏矩阵是一个二位数组,这个数组无论横向纵向都是递增的。

比如数组

1 4 7
2 5 8
3 6 9

要想时间复杂度小于o(n)就不能遍历整个数组,其实只需判断这个i行j列的数组的arr[i-1][j-1]是否等于要找的数,如果大于要找的数,说明要找的数一定在该数的左下方。如果小于要找的数,说明要找的数一定在该数的下方。
实现代码如下

#include<stdio.h> //(markdown bug)#include<stdlib.h>int find_it(int arr[3][3], int key){    int i = 0;    int j = 2;    while (i < 3 && j >= 0)    {        if (key == arr[i][j])        {            return 1;        }        else if (key > arr[i][j])        {            i++;        }        else if (key < arr[i][j])        {            j--;        }    }    return 0;}int main(){    int arr[3][3] = { {1,4,7},{2,5,8},{3,6,9} };    int sz = sizeof(arr) / sizeof(arr[0][0]);    int key = 5;    int t =find_it(arr, key);    if (t == 0)        printf("no");    else if(t ==1)        printf("yes");    system("pause");    return 0;}
阅读全文
0 0
原创粉丝点击