public class 面试题3_二维数组中的查找 {
/*
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,
每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个
整数,判断数组中是否含有该整数。
*/
public static void main(String[] args) {
int[][] a={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
//int[][] a={{}};
System.out.println(isContained(a, 14));
//System.out.println(find(a, 0));
}
//暴力破解
public static boolean find(int[][] a,int n){
if(a==null||a.length==0||a[0].length==0){
return false;
}
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a.length; j++) {
if(a[i][j]==n){
return true;
}
}
}
return false;
}
//好的解法
public static boolean isContained(int[][] a,int n){
if(a==null||a.length==0||a[0].length==0){
return false;
}
int i=0,j=a[0].length-1;
while(true){
if(a[i][j]==n){
return true;
}else if(a[i][j]>n){
j--;
}else {
i++;
}
if(i>a.length-1||j<0){
return false;
}
}
}
}