【劍指Offer】04.二維數組中的查找(java)

【分析】

現在一看到題,第一反應,暴力求解。雖然不用費腦子,但是時間複雜度高啊。

這道在二維數組中查找目標值的題,也可以暴力查找,複雜度O(mn)。但是,這樣題目給定的"每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序"就毫無用處了。

所以,還是要動動小腦袋。

根據題目給定的條件,數組中的值沿主對角線方增大,如圖所示:

圖1

對於(i,j)位置的元素來講,左上都比它小,右下都比它大。這就提供了一個思路,從右上角開始查找目標值,根據目標值的大小向左向下移動。如果目標值大,往下找;如果目標值小,往左找。

【示例】

給定目標值5:

圖2

給定目標值20:

圖3

【代碼】

class Solution {
    public boolean findNumberIn2DArray(int[][] matrix, int target) {
        
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return false;
        }

        int n = matrix.length, m = matrix[0].length;
        int row = 0, col = m-1;

        while(row<n && col>=0){
            int num = matrix[row][col];
            if(num == target){
                return true;
            } else if(num > target){
                col--;
            } else{
                row++;
            }
        }
        return false;
    }
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章