剑指offer——面试题3二维数组
2016-03-16 22:24
513 查看
本系列的文章是作者在读何海涛所著的《剑指offer——名企面试官精讲经典面试题》时将里面的一些题用java做实现,以供大家参考学习。
面试题3:在一个二维数组中,每一行都是从上到下递增,每一列都是从左到右递增,设计一个函数实现输入一个这样的二维数组和一个数查找其是否存在。
分析:在二维数组中查找是否存在某一个数,遍历是绝对可行的但问题是实在是太慢了,实际上可以这样来思考:数组是有规律的:从上到下是递增的,从左到右也是递增的那么我们可以找一个角的数据来进行比较,比如右上角,如果这个值等于要查找的数那么直接返回true如果这个值比要查找的数大,那么就直接去掉这个值所在的这一列(因为右上角的数是这一列的数里面最小的),如果这个值小于要查找的那个值,那么就去掉这个值所在的这一列,如此循环即可。那么代码就很容易写了,java代码如下:
输出结果是:false
面试题3:在一个二维数组中,每一行都是从上到下递增,每一列都是从左到右递增,设计一个函数实现输入一个这样的二维数组和一个数查找其是否存在。
分析:在二维数组中查找是否存在某一个数,遍历是绝对可行的但问题是实在是太慢了,实际上可以这样来思考:数组是有规律的:从上到下是递增的,从左到右也是递增的那么我们可以找一个角的数据来进行比较,比如右上角,如果这个值等于要查找的数那么直接返回true如果这个值比要查找的数大,那么就直接去掉这个值所在的这一列(因为右上角的数是这一列的数里面最小的),如果这个值小于要查找的那个值,那么就去掉这个值所在的这一列,如此循环即可。那么代码就很容易写了,java代码如下:
package Array; /* * 实现的功能:在一个二维数组中找到某一个数 * 该二维数组的特性是:每一行从左到右递增,每一列从上到下 * 实现思路:先找某一个角上的数字比较然后通过比较大小来确定删除数组的一行或者一列 */ public class FindNum { /* * objArray:二维数组 * num:要查找的数字 */ public boolean findNum(int[][] objArray,int num){ boolean flage=false; if(objArray.length>0&&objArray!=null){ int columns=objArray[0].length;//总列数 int rows=objArray.length;//总行数 int row=0;//查找的行数,从第一行开始 int column=columns-1;//查找的列数,从最后一列开始 while(row<rows&&column>=0){ if(objArray[row][column]==num){ flage=true; break; }else if(objArray[row][column]>num){ column--; }else if(objArray[row][column]<num){ row++; } } } return flage; } }测试类:
package Array; public class Test { public static void main(String[] args) { int[][] obj=new int[][]{{1,2,8,9},{2,4,9,12},{3,7,10,13},{4,11,15,17}}; for(int i=0;i<obj.length;i++){ for(int j=0;j<obj[0].length;j++){ System.out.print(obj[i][j]+"\t"); } System.out.println(); } FindNum fn=new FindNum(); System.out.println(fn.findNum(obj, 6)); } }
输出结果是:false
相关文章推荐
- 程序员必读书单 1.0
- 剑指offer面试题21之包含min函数的栈
- 程序员如何优雅的挣零花钱
- 大志非才不就,大才非学不成—博文资源汇总
- 剑指offer面试题3之二维数组中的查找
- 解答Google的一道面试题
- 面试中的一些问题——JAVA(二)
- hadoop面试题总结1
- 态度
- 海量数据处理面试题
- Java面试求职之==与equals()差别
- 金融业IT员工,在总行做软件开发,职业发展道路真的很窄吗?
- 教你如何迅速秒杀99%的海量数据处理面试题【转】
- 今年第一次面试
- 浅谈程序员职业规划
- 剑指offer面试题11之求数值的整数次方
- 记第一次面试20160316
- 2016.3.15作业
- java基础面试题(1)
- 剑指 offer代码解析——面试题29数组中出线次数超过一半的数字