• 024找到二维阵列(keep it up)


    剑指offer在标题中:http://ac.jobdu.com/problem.php?

    pid=1384

    题目描写叙述:

    在一个二维数组中,每一行都依照从左到右递增的顺序排序。每一列都依照从上到下递增的顺序排序。请完毕一个函数,输入这种一个二维数组和一个整数。推断数组中是否含有该整数。

    输入:

    输入可能包括多个測试例子,对于每一个測试案例,

    输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数。

    输入的第二行包含一个整数t(1<=t<=1000000):代表要查找的数字。

    接下来的m行,每行有n个数,代表题目所给出的m行n列的矩阵(矩阵如题目描写叙述所看到的,每一行都依照从左到右递增的顺序排序,每一列都依照从上到下递增的顺序排序。

    输出:

    相应每一个測试案例,

    输出”Yes”代表在二维数组中找到了数字t。

    输出”No”代表在二维数组中没有找到数字t。

    例子输入:
    3 351 2 34 5 67 8 93 312 3 45 6 78 9 103 3122 3 45 6 78 9 10
    例子输出:
    YesNoNo
    思路:二维数组的行从左到右是递增的。列从上到下是递增的,我们能够对每一行採用二分查找。这样算法的时间复杂度为o(rlogc,r行数,c为列数)。那么这题有没有o(n)的时间复杂度呢?

    当然有。定义一个行指针r。初始值为0, 一个列指针初始值c为列的最大值:然后

    1)推断array[r][c] > key。说明最后一列的第一数太大。删除最后一列:c减1

    2)推断array[r][c] < key,说明当前行的最后一个小于key,此行不能找到key,在下一行找:r加1

    3)假设array[r][c] = key, 说明找到,返回1

    代码:

    #include <stdio.h>
     
    #define ROW 1000
    #define COL 1000
     
    int Array[ROW][COL];
     
    int findNumber(int vRow, int vCol, int vKey)
    {
        int Row, Col;
     
        Row = 0;
        Col = vCol-1;
     
        while (Row < vRow && Col > -1)
        {
            if (Array[Row][Col] < vKey)
            {
                ++Row;
            }
            else if (Array[Row][Col] > vKey)
            {
                --Col;
            }
            else
            {
                return 1;
            }
        }
     
        return 0;
    }
     
    int main()
    {
        int Row, Col, Key, IsFind;
     
        while (scanf("%d %d", &Row, &Col) != EOF)
        {
            scanf("%d", &Key);
            for (int i = 0; i < Row; ++i)
            {
                for (int j = 0; j < Col; ++j)
                {
                    scanf("%d", &Array[i][j]);
                }
            }
     
            IsFind = findNumber(Row, Col, Key);
     
            if (IsFind)
            {
                printf("Yes
    ");
            }
            else
            {
                printf("No
    ");
            }
        }
     
        return 0;
    }
    /**************************************************************
        Problem: 1384
        User: 
        Language: C
        Result: Accepted
        Time:680 ms
        Memory:4820 kb
    ****************************************************************/





    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    利用vbs设置Java环境变量
    svg translate 操作
    JSTL详解(二)
    [Oracle]
    怎样搭建轻量级架构-设计原则
    数据结构--队列
    opencv中各种矩阵乘的差别
    多重背包
    Linux管理员必须知道的sudo命令
    大二上學期學習生活總結
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4726541.html
Copyright © 2020-2023  润新知