剑指Offer——二维数组中的查找
2016-04-21 13:45
253 查看
在牛客网上刷题:二维数组中查找
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解决方案有如下三种:
public class 二维数组的查找 { public static void main(String[] args) { int[][] array = {{1,2,3},{4,5,6},{7,8,9}}; System.out.println(Find1( array,4)); System.out.println(Find1( array,0)); System.out.println(Find2( array,4)); System.out.println(Find2( array,0)); System.out.println(Find3( array,4)); System.out.println(Find3( array,0)); } //方法1:选择一个参考点(二选一:左下角或者右上角) public static boolean Find1(int [][] array,int target) { int x = array.length-1; int y = 0; while(x>=0 && y<array[0].length){ if(array[x][y] == target){ return true; }else if(array[x][y] > target){ x--; }else y++; } return false; } //方法二:foreach()方法遍历。。。 public static boolean Find2(int [][] array,int target) { for(int[] i : array){ for(int j : i){ if(j==target)return true; } } return false; } //方法三:把每一行看成有序递增的数组,利用二分查找,通过遍历每一行得到答案, 时间复杂度是nlogn public static boolean Find3(int [][] array,int target) { for(int i=0;i<array.length;i++){ int low=0; int high=array[i].length-1; while(low<=high){ int mid=(low+high)/2; if(target>array[i][mid]) low=mid+1; else if(target<array[i][mid]) high=mid-1; else return true; } } return false; } }
相关文章推荐
- js提交表单
- 浏览器加载外部js 的顺序,以及处理顺序。
- 前端的性能优化都有哪些东西?
- QT禁止父窗口样式影响子控件样式
- JavaScript转换与解析JSON的方法
- js/web 日程管理 插件
- angular filter ng-repeat 用法
- 什么?你还不会写JQuery 插件
- swiperLeft/swiperRight以及js长按事件
- JavaScript 对象
- 三种纯CSS实现三角形的方法
- HTML5超炫酷粒子效果的进度条
- 剑指offer(十八)之数组中只出现一次的数字
- jquery 图片轮播
- 60行JS实现俄罗斯方块
- 纯CSS超过宽度显示省略号
- javascript深入理解js闭包
- javascript textContent与innerText的异同分析
- 使用jquery-fileupload.js实现文件上传-webx3
- nodejs高大上的部署方式-PM2