1. 程式人生 > >劍指Offer(java+第三題,二維陣列中的查詢)

劍指Offer(java+第三題,二維陣列中的查詢)

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));
	}
}

執行結果