nowcoder-劍指offer-二維陣列的查詢

Dearの 陽清凜發表於2020-10-18

原題連結

由題意可知,我們需要在一個有序二維陣列中查詢一個特定的值。
暴力迴圈就不講了
由題目的有序陣列我們很容易想到二分法,但在這裡卻有些行不通。

如果我們從左上角開始查詢,則會發現如果target(即需要查詢的數字)大於array[0][0](即左上角的數字)則無法確定查詢方向,因為無論是往右還是往下,都比array[0][0]大,所以我們可以另闢蹊徑,從左下角或者右上角開始查詢,這是很顯而易見的
那麼接下來我們給出程式碼:

class Solution{
    public boolean find(int target, int [][] array){
    	/*注意這裡判斷陣列是否為空,否則如果陣列為空,則會出現空指標異常*/
        if(array.length==0){
            return false;
        }
        /*獲得array陣列的行長度與列長度*/
        int rowLength=array.length,columnLength=array[0].length;
        /*定義初始查詢位置*/
        int rowIndex=rowLength-1,columnIndex=0;
        /*如果查詢越界,則表明陣列當中不存在該數字*/
        while(rowIndex>=0&&columnIndex<columnLength){
        	/*查詢過程*/
            if(array[rowIndex][columnIndex]>target){
                rowIndex--;
            }else if(array[rowIndex][columnIndex]<target){
                columnIndex++;
            }else{
                return true;
            }
        }
        return false;
    }
}

相關文章