C语言编程在杨氏数组中查找数字-创新互联

题目:
杨氏矩阵(一个二维数组,数组的每行从左到右是递增的,每列从上到下是递增的)
在这样的数组中查找一个数字是否存在。
要求时间复杂度小于O(N);

创新互联是专业的铜梁网站建设公司,铜梁接单;提供成都网站建设、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行铜梁网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

主要思路:
题目要求时间复杂度度不能大于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
#include
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;
}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:C语言编程在杨氏数组中查找数字-创新互联
URL分享:http://hbruida.cn/article/doojep.html