在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
public class FindInArray {
public static void main(String[] args) {
int[][] arr = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
int[][] arr1 = null;
System.out.println(find(arr,9));
// System.out.println(isExist(arr,19));
}
/**
* 在一个二维数组中,每一行都按照从左到右递增的顺序排序
* 每一列都按照从上到下递增的顺序排序。判断该二维数组中,是否有特定的数.
*
* 首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,
* 剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行
*
* 当我们需要解决一个复杂的问题时,一个很有效的办法就是从一个具体的问题入手,通过分析简单具体的例子,试图寻找普遍的规律。
* @param arr
* @param num
* @return
*/
public static boolean isExist(int[][] arr, int num){
if(arr==null || arr.length==0) return false;
boolean exist = false;
int i=0;
int row = arr.length;
int column = arr[i].length-1;
while(i<row && column>=0){
if(arr[i][column]==num){
exist = true;
break;
}else if(arr[i][column]>num)
column--;
else
i++;
}
return exist;
}
/**
* 递归写法
* @param arr
* @param num
* @return
*/
public static boolean find(int[][] arr, int num){
if(arr==null || arr.length==0)return false;
return find(arr,num,0,arr[0].length-1);
}
private static boolean find(int[][] arr, int num, int row, int column){
if(column<0 || row>=arr.length) return false;
if(arr[row][column]==num)return true;
else if(arr[row][column]>num)return find(arr,num,row,column-1);
else return find(arr,num,row+1,column);
}
}
当我们需要解决一个复杂的问题时,一个很有效的办法就是从一个具体的问题入手,通过分析简单具体的例子,试图寻找普遍的规律。