题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
审题求解:
第一种:暴力求解
分析:直接便利查找整个数组找到返回true
代码如下:
public class Query {
public Boolean Find(int target, int [][] array) {
for(int i=0;i<array.length;i++){
for(int j=0;j<array[0].length;j++){
if(array[i][j] == target){
return true;
}
}
}
return false;
}
}
第二种:从左下方查找
分析:开始利用题目条件
每一行都按照从左到右递增的顺序排序
每一列都按照从上到下递增的顺序排序
也就是说左下方的那个数是这行最小的这列最大的,也就是说与之比较可以一下排除一行。
查找的数为target,左下方的数为n。
有以下几种情况
n<target n已经是那一列最大的数了所以需要往下一列移动,也就是右移,
n>target n已经是那一行最小的数了所以需要往上一行移动,依旧是上移,
n=target 直接返回true。
public class Query {
public Boolean Find(int target, int [][] array) {
int rows=array.length;
if(rows==0)
{
return false;
}
int cols=array[0].length;
if(cols==0)
{
return false;
}
int row=rows-1;
int col=0;
while(row>=0&&col<cols)
{
if(array[row][col]<target)
{
col++;
}
if(array[row][col]>target)
{
row--;
}
if(array[row][col]==target)
{
return true;
}
}
return false;
}
}