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;
        }
    
    }

    四.本题考点

    • 考查应聘者对二维数组的理解及编程能力。二维数组在内存中占据连续的存储空间。在内存中从上到下存储各行元素,在同一行中按照从左到右的顺序存储。因此我们可以根据行号和列号计算出相对于数组首地址的偏移量,从而找到对应的元素。
    • 考查应聘者分析问题的能力。当应聘者发现问题比较复杂时,能不能通过具体的例子找出其中的规律,是能否解决这个问题的关键所在。这个题目只要从一个具体的二维数组的右上角开始分析,就能找到查找的规律,从而找到解决问题的突破口。
  • 相关阅读:
    POJ 1659 Frogs' Neighborhood (贪心)
    HDU 2544 最短路 (Floyd)
    CodeForces 632C Grandma Laura and Apples (模拟)
    CodeForces 731F Video Cards (数论+暴力)
    CodeForces 731C Socks (DFS或并查集)
    CodeForces 731B Coupons and Discounts (水题模拟)
    CodeForces 731A Night at the Museum (水题)
    UVaLive 6834 Shopping (贪心)
    zzuli 1484 继续双线
    zzuli 1875多线DP
  • 原文地址:https://www.cnblogs.com/ovs98/p/9854837.html
Copyright © 2011-2022 走看看