剑指offer面试题3:二维数组中的查找 java实现

来源:互联网 发布:mac桌面快捷键 编辑:程序博客网 时间:2024/06/10 11:58
题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的递增的顺序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

例如:

1    2    8    9

2    4    9   12

4    7   10  13

6    8   11  15

如果查找数字7,则返回true,如果查找5,则返回false;


题目分析:首先应该先选取数组中右上角的数字,如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列,如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说,如果要查找的数字不再二维数组的右上角,则每次都在数组的查找范围内剔除一行或一列,这样每一步都可以缩小查找范围,直到找到要查找的数字,或者查找范围为空(本段摘自 何海涛 《剑指offer》书中)。


程序实现:

/**************************************************************             * 版 本 号:v1.0                  * 题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的递增的顺序。*请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。*例如:1  2  8  9*      2  4  9  12*      4  7  10 13*      6  8  11 15如果查找数字7,则返回true,如果查找5,则返回false;* 问题分析:1.在调用FindFromMatrix类时,需要用到对象名.函数名。*<span style="white-space:pre"></span>findfrommatrix.getValueFromMatrix(findfrommatrix.sample,4,4,7)* 输入描述:无* 程序输出:<span style="white-space:pre"></span>  1  2  8  9*  2  4  9  12*  4  7  10 13*  6  8  11 15*  true***************************************************************/class FindFromMatrix{public static int[][] sample = new int[][] {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};public static void pirntSample(){for(int i = 0 ;i < sample.length;i++){for(int j = 0; j<sample.length;j++){System.out.print(sample[i][j] + " ");}System.out.println();}}public static boolean getValueFromMatrix(int[][] sample,int rows,int columns,int number){boolean found = false;if(sample != null && rows > 0 && columns > 0){int row = 0;int column = columns - 1;while(row < rows && column >= 0){int tempValue = sample[row][column];if(number > tempValue){++row;}else if(number < tempValue){--column;}else{found = true;break;}}}return found;}}public class find_args{public static void main(String args[]){//pirntSample();FindFromMatrix findfrommatrix = new FindFromMatrix();findfrommatrix.pirntSample();System.out.println(findfrommatrix.getValueFromMatrix(findfrommatrix.sample,4,4,7));}}


程序输出结果:



0 0