import java.util.Scanner;
/**
*
*/
/**
* @author jueying:
* @version 创建时间:2018-10-21 下午04:03:54
* 类说明
*/
/**
* @author jueying
*
*/
public class Test3 {
/*
* 算法入口
*
* 一个从右向左递增,从上到下递增的二位数据矩阵,怎么用算法复杂度O(n)的算法来查找其中的某一个数
*
* 思想:每次都用右上角的数来和需要查找的数进行判断,来排除一列或者一行,否则就查找成功
*/
public static void fun(int a[][],int b,int k,int j){//a是查找数据矩阵 b是需要查找的数 4行 4列
for(int i=k;i<a.length;i++){
if(j>0&&k<a.length){
if(b<a[i][j]){
fun(a,b,k,--j);//排除最后一列 最多j次
}else if(a[i][j]<b){
fun(a,b,++k,j);//排除第一行 最多j次
}else{//查找成功//z次
System.out.println(a[i][j]);
System.out.println("在第"+(i+1)+"行"+" 第"+(j+1)+"列");
System.exit(0);
}
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[][]={{2,4,6,8,9},{5,7,10,11,12},{6,8,13,15,19},{15,17,19,21,22}};
System.out.print("demo例子的数据\n");
for(int i=0;i<a.length;i++){
for(int j=0;j<a.length;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
System.out.println("请输入需要查找的数据");
Scanner sc=new Scanner(System.in);
int b=sc.nextInt();
fun(a,b,0,3);//默认从第0行最后一列开始判断
}
}