zoukankan      html  css  js  c++  java
  • 面试题4:二维数组中的查找

    一.题目

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

    例如:从下面的二维数组中查找7返回true,查找5返回false

             1   2   8    9

             2   4   9   12

             4   7   10  13

             6   8   11  15

    二.思路

            如果从左上角或右下角开始查找,则要考虑的情况比较多,而从右上角或左下角考虑的话,则情况较少,这里我们从右上角开始查找。

    三.代码

    bool find(int** nums,int rows,int columns,int target){
        
        if(nums == nullptr || columns <= 0 || rows == 0)
            return false;
    
        int row = 0;
        int column = columns - 1;
        while(column >= 0){
    
            if(nums[row][column] == target)  //如果传入参数是一维数组,则变为nums[row * columns + column]
                return true;
    
            else if (nums[row][column] > target)
                --column;
    
            else
                ++row;
        }
    
    }

    四.本题考点

    • 考查应聘者对二维数组的理解及编程能力。二维数组在内存中占据连续的存储空间。在内存中从上到下存储各行元素,在同一行中按照从左到右的顺序存储。因此我们可以根据行号和列号计算出相对于数组首地址的偏移量,从而找到对应的元素。
    • 考查应聘者分析问题的能力。当应聘者发现问题比较复杂时,能不能通过具体的例子找出其中的规律,是能否解决这个问题的关键所在。这个题目只要从一个具体的二维数组的右上角开始分析,就能找到查找的规律,从而找到解决问题的突破口。
  • 相关阅读:
    唯有坚持方能成功
    Java程序猿,你为什么要关注Scala
    HDU 2871 Memory Control(线段树)
    SQL 合并两个结果集 一个倒序,一个正序
    Charm Bracelet(poj3624)(01背包)
    Dijkstra算法,求单源最短路径(包括路径)
    aix平台安装10.2.0.5的CRS时遇到的bug
    Java语言基础系列之1--用IDEA编写HelloWorld
    UVA 10986 Sending email SPFA
    NumberProgressBar开源项目学习
  • 原文地址:https://www.cnblogs.com/ovs98/p/9854837.html
Copyright © 2011-2022 走看看