面试题3-二维数组中的查找

题目要求

在一个二维数组中,每一行都会按照从左至右递增的规律排列,每一列都会按照从上到下递增的规律排列。请完成一个函数,输入一个二维数组与一个整数,判断数组中是否有该整数

题目解析

思路一:

  • 分析

已知二位数组的元素分布规律,可以知道对于右上角的元素m来说,同行左边所有的元素都小于该元素,同列下面的元素都大于该元素。
于是,我们选择取右上角的元素m与查找元素n比较,若是m>n,则可以排除m所属的那一列,若m<n,则可以排除m所属的那一行,若是m=n则直接返回ture
循环上一步,直至找到,或者查找完整个二维数组。

  • 代码段
public boolean demo1(int[][] datas , int data) {
        
        //判非空
        if(datas == null || datas.length == 0) {
            return false ;
        }
        
        int row = 0 ;
        int col = datas[0].length-1 ;
        
        //开始查找
        while( row >= 0 && col >= 0 ) {
            
            if( datas[row][col] == data ) {
                return true ;
            }else if( datas[row][col] > data ) {
                col -- ;
            }else if( datas[row][col] < data ) {
                row ++ ;
            }
        }
        
        return false ;
        
    }

测试代码

public static void main(String[] args) {
        
        int[][] datas = {{1,2,8,9},
                         {2,4,9,12},
                         {4,7,10,13},
                         {6,8,11,15}} ;
        
        Demo d1 = new Demo() ;
        System.out.println(d1.demo1(datas, 7));
        
        System.out.println(d1.demo1(datas, 0)) ;
        
    }

运行结果

true
false


看完整源码戳源码地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数...
    _minimal阅读 1,666评论 1 0
  • 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的递增的顺序排序。请完成一个函数,...
    qmss阅读 2,299评论 0 0
  • 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输...
    Felicia1993阅读 775评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,737评论 18 399
  • 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输...
    minningl阅读 3,265评论 0 0

友情链接更多精彩内容