《剑指offer》- 面试题4:二维数组中的查找(java实现)

原创 2018年04月17日 14:19:06
题目:
        在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
                                                                    
        例如上面数组就满足左到右递增,上到下递增。如果查找7应该返回true,查找5应该返回false。

        这题的关键是当前选取的数字。首先选取数组中右上角的数字(左下角也行,左上和右下不行,可以想想为什么)。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者范围缩小到空找不到数字。如下图,阴影是下一步的查找范围:
                          
        代码实现如下:
public class FindInPartiallySortedMatrix {
    boolean Find(int[][] matrix,int rows, int cols, int num) {
        if (matrix != null && matrix.length == rows) {
            for (int i = 0; i < rows; ++i) {
                if (matrix[i].length != cols) throw new IllegalArgumentException("Not a Matrix");
            }
        }else throw new IllegalArgumentException("Not a Matrix");
        int row = 0;
        int col = cols - 1;
        while (row < rows && col >= 0) {
            if (matrix[row][col] == num) return true;
            if(matrix[row][col] > num) --col;
            else ++row;
        }
        return false;
    }

    public static void main(String[] args) {
        FindInPartiallySortedMatrix findInPartiallySortedMatrix = new FindInPartiallySortedMatrix();
        int[][] matrix = new int[][]{{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
        System.out.println(findInPartiallySortedMatrix.Find(matrix,4,4,5));

    }
}


JAVA实现二维数组中的查找(《剑指offer》)

最近在刷《剑指offer》里的编程题,但是网上关于《剑指offer》的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码(当然也有部分是借鉴了网...
  • qq_15062527
  • qq_15062527
  • 2015-10-01 14:24:34
  • 1431

剑指offer算法 java实现 二维数组中的查找

题目: 在一个二维数组中,每一行都按照从左到右
  • believejava
  • believejava
  • 2014-08-16 14:33:31
  • 5656

剑指offer 面试题(二维数组中的查找) (2)

面试题: 二维数组中的查找    /* 题目:   在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成 一个函数,输入这样的一个二维数组和一个整数...
  • bitboss
  • bitboss
  • 2016-05-08 15:41:29
  • 703

剑指offer面试题:二维数组中的查找,C语言实现

我是从九度OJ上面看到这个
  • ahfytao
  • ahfytao
  • 2014-10-27 17:45:32
  • 795

剑指offer面试题 java解答1-5

面试题1:赋值运算符函数 Java中不能重载运算符(C++可以) String 类的“+”是通过StringBuidler的append追加实现的。 可以重写自定...
  • frasker
  • frasker
  • 2016-08-22 16:19:38
  • 600

剑指Offer:面试题3——二维数组中的查找(java实现)

问题描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.思路:取数组中的元素与目...
  • lilianforever
  • lilianforever
  • 2016-07-05 10:24:07
  • 722

剑指offer:二维数组中的查找(数组)

题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 分析: ...
  • fengsser
  • fengsser
  • 2015-06-29 10:12:17
  • 1666

剑指offer:二维数组中的查找(java)

例如下面的二维数组就是每行、每列都是递增排序。如果在这个数组中查找数字7,则返回true,如果查找数组5,由于数组中不含有该数字,则返回false。 1  2  8  9 2  4  9  12 ...
  • abc7845129630
  • abc7845129630
  • 2016-09-29 09:42:38
  • 170

经典面试题——二维数组查找

题目:在一个二维数组中,每一行都从左到右递增,每一列也从上到下递增,请写一个函数给出这个二维数组和一个整数,判断数组中是够含有这个数。...
  • weiwang1996
  • weiwang1996
  • 2017-03-31 12:03:07
  • 640

牛客网刷题---二维数组中的查找(剑指offer)

题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。  输入描述...
  • liu_sheng_1991
  • liu_sheng_1991
  • 2016-06-20 17:56:49
  • 1107
收藏助手
不良信息举报
您举报文章:《剑指offer》- 面试题4:二维数组中的查找(java实现)
举报原因:
原因补充:

(最多只允许输入30个字)