一個從右向左遞增,從上到下遞增的二位資料矩陣,怎麼用演算法複雜度O(n)的演算法來查詢其中的某一個數
阿新 • • 發佈:2018-11-17
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行最後一列開始判斷 } }