二维数组中的查找
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路
在一个二维数组中,如果我们一个一个进行遍历的话会十分麻烦,所以我们采取另一种方式。由于数组是按照递增顺序排列的,所以我们可以从右上角开始进行查找,如若右上角的数字小于目标数字,那么就向下遍历,如果右上角的数字小于目标数字,那么就使列数减一,继续进行比较,直到找出数字或者不满足循环条件二退出。具体思路如下图所示。
图片:
具体代码的实现
public static boolean Find(int target, int [][] array) {
boolean flag =false;
//判断传来的数据是否合法
if(array==null) {
flag=false;
}
//规定从右上角开始,若大于则列数则减少,若小于则行数增加,rows为二维数组的行数,columns为二维数组的列数
int rows=array.length;
int columns=array[0].length;
int ro=0;
int co=columns-1;
while(ro<rows&&co>=0) {
if(array[ro][co]==target) {
flag=true;
break;
}else if(array[ro][co]>target){
co--;
}else if(array[ro][co]<target) {
ro++;
}
}
return flag;
}
}