剑指Offer 二维数组中的查找
来源:互联网 发布:php可以开发管理系统吗 编辑:程序博客网 时间:2024/06/12 02:57
时间限制:1秒
空间限制:32768K
热度指数:478583
算法知识视频讲解题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析:大体上有两种方法
一种是每一行都采用一次二分搜索,时间复杂度为n(log n)
另一种是利用二维数组由上到下,由左到右递增的规律,
那么选取右上角或者左下角的元素a[row][col]与target进行比较,
当target小于元素a[row][col]时,那么target必定在元素a所在行的左边,
即col--;
当target大于元素a[row][col]时,那么target必定在元素a所在列的下边,
即row++;
显然是第二种方法更为巧妙,简便,耗时少
下面AC代码:
public class Solution { public boolean Find(int target, int [][] array) { //先防护 if(array == null || array.length == 0){ return false; } //使用二分 for(int i = 0;i<array.length;i++){ int minp = 0; int maxp = array[i].length; if(array[i].length == 0){ continue; } if(target>=array[i][0] && target<=array[i][array[i].length-1]){//如果在第i行 while(maxp>=minp){ int p = (minp+maxp)/2;//指针 if(target == array[i][p]){ return true; }else if(target < array[i][p]){ maxp = p-1; }else{ minp = p+1; } } } } return false; }}
public class Solution { public boolean Find(int target, int [][] array) { //if(array == null || array.length == 0){ // return false; //} //从右上角开始 int row = 0;//第0行 int col = array[0].length-1;//第0行 最后一个 while(row<=array.length-1 && col>=0){ if(target == array[row][col]){ return true; }else if(target > array[row][col] ){ row++; }else{ col--; } } return false; }}
阅读全文
0 0
- 剑指offer-->二维数组中的查找
- 剑指offer之二维数组中的查找
- 剑指offer:3-二维数组中的查找
- [剑指Offer]二维数组中的查找
- 【剑指offer】二维数组中的查找
- [剑指Offer]二维数组中的查找
- 剑指Offer:二维数组中的查找
- 【剑指offer】二维数组中的查找
- 剑指offer 1384 二维数组中的查找
- 剑指Offer之二维数组中的查找
- 剑指offer 03:二维数组中的查找
- 剑指offer(2) - 二维数组中的查找
- 剑指offer-二维数组中的查找
- 剑指offer-3 二维数组中的查找
- 剑指Offer之 - 二维数组中的查找
- 剑指offer 3 -二维数组中的查找
- 剑指offer之二维数组中的查找
- [剑指Offer]5.二维数组中的查找
- CentOS 7服务器安全配置(未完待续)
- Charles使用教程
- 我的Kotlin学习之旅(一)
- elasticsearch5.0启动出现的错误
- Java集合架构____Map工具类
- 剑指Offer 二维数组中的查找
- 深圳商报 | 跨境电商大会聚焦跨境收款难题
- 引用和指针的区别
- BZOJ 2789: [Poi2012]Letters
- 四.Android六种布局详细讲解
- 2017年OWASP十大安全漏洞
- 卷积神经网路综述
- 读取配置文件信息
- 【css学习笔记】深入理解之float