二维数组中的查找:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析:
使用暴力法,若从第一行第一列开始查找,这样很麻烦,但是,根据题意,每一行,每一列都是递增的,
所以我们可以换个思路,从数组的左下角或者右上角开始进行判断。
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
这样做为什么可行呢?把数组想象成一个棋盘,起点是左下角,终点是target(棋盘中的某个位置)。其实就是找一条最短路从起点到终点,那么判断的条件是如果当前元素比target大,那么就往往上走;如果target比当前元素小,就往右走。
public class Solution {
public boolean Find(int target, int [][] array) {
boolean flag = false;
int rows = array.length;
int cols = array[0].length;
if(array!=null && rows>0 && cols>0){
int row = rows - 1;
int col = 0;
while(row>=0 && col<cols){
int temp = array[row][col];
if(target>temp){
++col;
}else if(target<temp){
--row;
}else{
flag = true;
break;
}
}
}
return flag;
}
}