劍指Offer(java+第三題,二維陣列中的查詢)
阿新 • • 發佈:2018-11-26
3.在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
思路:從右上角或左下角開始找,逐行刪除,或者用二分法查詢
程式碼:
public class Offer03 { public boolean Find(int [][] arrays, int target){ if(arrays == null){ return false; } int row = 0; int column = arrays[0].length-1; while(row<arrays.length && column>=0){ if(arrays[row][column] == target){ return true; }else if(arrays[row][column]>target){ column--; }else{ row++; } } return false; } public static void main(String[] args) { // TODO Auto-generated method stub int [][]arrays = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}}; Offer03 of03 = new Offer03(); //測試用例 //1,二維陣列中包含查詢的數字(查詢的陣列是陣列中的最大值和最小值,查詢的數字介於陣列中的最大值和最小值之間) int target1 = 15; int target2 = 1; int target3 = 7; System.out.println(of03.Find(arrays, target1)); System.out.println(of03.Find(arrays, target2)); System.out.println(of03.Find(arrays, target3)); //2,二維陣列中沒有查詢的數字(查詢的數字大於陣列中的最大值,查詢的數字小於陣列中的最小值, //查詢的數字在陣列的最大值和最小值之間但是陣列中沒有這個數字) int target4 = 16; int target5 = 0; int target6 = 3; System.out.println(of03.Find(arrays, target4)); System.out.println(of03.Find(arrays, target5)); System.out.println(of03.Find(arrays, target6)); //3,特殊輸入測試(輸入空指標) int target7 = 7; int [][] arrays_2 = null; System.out.println(of03.Find(arrays_2, target7)); } }
執行結果: