首页 > 编程语言 > 详细

【剑指Offer】1、二维数组中的查找

时间:2019-04-16 12:21:11      阅读:126      评论:0      收藏:0      [点我收藏+]

??题目描述:

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

??解题思路:

??很明显,由于该二维数组上到下递增,左到右递增的特殊性,遍历整个矩阵进行查找不是该题目的意图所在。总结规律我们可以发现:应该从矩阵的右上角或者左下角开始查找。

??以右上角为例,首先选取右上角的数字,如果该数字等于要查找的数字,则查找过程结束;如果该数字大于要查找的数字,则说明该列其他元素都大于要查找的数字,便可以删掉该列;如果该数字小于要查找的数字,则说明该行其他元素也都小于要查找的数字,便可以删掉该行。

??这样,每一次比较都可以剔除一行或者一列,进而缩小查找范围,时间复杂度为O(n)。

??举例:

??比如在下面的二维数组中查找数字7,查找过程如下:


技术分享图片

??编程实现(Java):

    public boolean Find(int target, int [][] array) {
        if(array==null||array.length==0)
            return false;
        int row=array.length; //行数
        int col=array[0].length; //列数
        for(int i=0,j=col-1;i<row&&j>=0;){ //从右上角开始查找
            if(array[i][j]==target) //找到
                return true;
            else if(array[i][j]>target) //不可能在该列,跳过该列
                j--;
            else //不可能在该行,跳过该行
                i++;
        }
        return false;
    }

【剑指Offer】1、二维数组中的查找

原文:https://www.cnblogs.com/gzshan/p/10716061.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!