您的位置:首页 > Web前端

剑指Offer——二维数组中查找数字

2018-03-09 21:03 197 查看
题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

public class Solution {
/*
最简单的思想就是遍历数组,逐个元素的比较该二维数组中是否含有该整数
但是这个方法时间复杂度太高,接下来我们分析一下查找的过程
首先我们写出一个符合要求的二维数组:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
那么我们给定一个整数13,现在来查找13
如果我们从左上角开始查找,那么13>1,这时1右边和下边的元素都大于1,也就是说
13可能在1的右边,也可能在1的下边,这样我们就没有缩小查找范围,这样的查找方
式肯定是有问题的,那么我们试着从右上角开始查找,13>5,但是由于5左边的数都
小于5,更小于13,因此第一行的数据可以直接排除,那么我们就缩小了查找范围,同理
可以排除第二行,对于第3行来说13<15,而15下面的数都大于15,更大于13,因此最
后一行被排除,同理倒数第二行被排除,这时剩下的右上角的数据就是13,如果把整个
二维数组都排除掉还没有找到该整数,则说明不存在该整数
*/
public boolean Find(int target, int [][] array) {
if(array == null || array.length == 0){
return false;
}
int rows = array.length;
int cols = array[0].length;
return FindCore(target, array,0, cols-1);
}
public boolean FindCore(int target, int [][] array,int row, int col) {
if(row== array.length || col < 0){
return false;
}
if(array[row][col]>target){
return FindCore(target, array,row, col-1);
}
else if(array[row][col]<target){
return FindCore(target, array,row+1, col);
}
else{
return true;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二维数组 查找