题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
思路:
二维数组是有序的,从右上角来看,向左数字递减,向下数字递增。
因此从右上角开始查找,当要查找数字比右上角数字大时,下移;
当要查找数字比右上角数字小时,左移;如果出了边界,则说明二维数组中不存在该整数。
代码:(给出两种方法)
public class 二维数组中的查找 {
public static void main(String[] args) {
int [][]num = {{1,2,3},{4,5,6},{7,8,9}};
int x = 5 ;
findNum(num, x);
System.out.println(findNum2(x, num));
}
/**
* 第一种方法
* @param num 数组
* @param x 整数
*/
public static void findNum(int[][] num,int x){
if(num.length <= 0 || num[0].length <= 0 ){
return ;
}
int rLen = num.length - 1;
int c = num[0].length - 1 ;
int r = 0 ;
while( r <= rLen && c >= 0){
if(num[r][c] > x){
c --;
}else if(num[r][c] < x){
r ++;
}else if(num[r][c] == x){
System.out.println(x+"存在");
break;
}else{
System.out.println("二维数组不存在"+x);
}
}
}
/**
* 第二中方法
*/
public static boolean findNum2(int target,int[][] num){
if(num.length == 0 || num[0].length == 0){
return false;
}
/**
* 定义行和列,从最右边开始扫描
*/
int r = 0 ;
int c = num[0].length - 1 ;
int temp = num[r][c];//临时变量,保存当前的值,进行和整数比较
while(target != temp){
if(c >= 0 && r < num.length){
if(num[r][c] > target){
c --;
}else if(num[r][c] < target){
r ++;
}
temp = num[r][c] ;
}else{
return false;
}
}
return false ;
}
}