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

来源:互联网 发布:深圳市软件培训机构 编辑:程序博客网 时间:2024/05/18 12:40

例如下面的二维数组就是每行、每列都是递增排序。如果在这个数组中查找数字7,则返回true,如果查找数组5,由于数组中不含有该数字,则返回false。

1  2  8  9

2  4  9  12

4  7  10  13

6  8  11  15

  首先我们选取数组右上角的数字9.由于9大于7,并且9还是第4列的第一个(也是最小的)数字,因此7不可能出现在数字9所在的列,于是只需要分析剩下的3列,在剩下的矩阵中,位于右上角的数字还是8.同样8大于7,因此8所在的列也可以剔除。接下来只需分析剩下的两列,由于2小于7,那么要查找的7可能在2的右边和下边。由于2的右边都已经被剔除,所以只可能出现在2的下边,将2所在的行剔除,只剩下三行两列,再和前面同样的方法查找,当找到7时就结束了。
  总结规律如下:首先选取矩阵右上角的数字。如果等于要查找的数字,查找过程结束;如果大于要查找的数字,则剔除这个数字所在的列,如果小于要查找的数字,则剔除这个数字所在的行。这样每一步都可以缩减查找范围,直到找到要查找的数字,或者查找失败。

  1. public static boolean getValuefromMatrix(int[][] sample, int rows,    
  2.             int columns, int num) {    
  3.         boolean found = false;    
  4.         if (sample != null && rows > 0 && columns > 0) {    
  5.             int row = 0;    
  6.             int column = columns - 1;    
  7.             while (row < rows && column >= 0) {    
  8.                 int tempValue = sample[row][column];    
  9.                 if (num > tempValue) {    
  10.                     ++row;    
  11.                 } else if (num < tempValue) {    
  12.                     --column;    
  13.                 } else {    
  14.                     found = true;    
  15.                     break;    
  16.                 }    
  17.             }    
  18.         }    
  19.     
  20.         return found;    
  21.     }    

0 0
原创粉丝点击