1. 程式人生 > >【演算法訓練營】二維陣列中的查詢

【演算法訓練營】二維陣列中的查詢

題目

在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。

思路

首先我們選擇從右上角開始搜尋,(為什麼不從左上角開始搜尋,左上角向右和向下都是遞增,那麼對於一個點,對於向右和向下會產生一個岔路;如果我們選擇從右上腳開始搜尋的話,如果大於就向下,如果小於就左)。

演算法

public class Demo01_findnumber {
	public static void main(String[] args) {
		int[][] array = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,10,15}};
		System.out.println("要查詢的陣列為:");
		printarray(array);
		System.out.println(Find(array,11));
	}

	private static void printarray(int[][] array) {
		// TODO Auto-generated method stub
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				System.out.print(array[i][j] + "  ");
			}
			System.out.println();
		}
	}
	
    public static boolean Find(int [][] array,int target) {
    	int i = 0;
    	int j = array[0].length - 1;
    	while (i<array.length && j>=0) {
    		System.out.println("現在查詢的元素為:array["+i+"]["+j+"] = "+array[i][j]);
        	if (target == array[i][j]) {
    			return true;
    		}else if (target < array[i][j]) {
				j--;
			}else{
				i++;
			} 
		}
    	return false;		
    }
}