【演算法訓練營】二維陣列中的查詢
阿新 • • 發佈:2019-02-14
題目
在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
思路
首先我們選擇從右上角開始搜尋,(為什麼不從左上角開始搜尋,左上角向右和向下都是遞增,那麼對於一個點,對於向右和向下會產生一個岔路;如果我們選擇從右上腳開始搜尋的話,如果大於就向下,如果小於就左)。
演算法
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; } }