劍指offer04 二維陣列中的查詢
阿新 • • 發佈:2021-08-09
題目
在一個 n * m 的二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個高效的函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
示例: 現有矩陣 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 給定 target=5,返回true。 給定target=20,返回false。 限制: 0 <= n <= 1000 0 <= m <= 1000
方法
暴力法
- 時間複雜度:O(m*n),m為行數,n為列數
- 空間複雜度:O(1)
線性查詢
- 時間複雜度:O(m+n),m為行數,n為列數
- 空間複雜度:O(1)
class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { int row = matrix.length; if(row<1){ return false; } int col = matrix[0].length; int i = 0,j = col-1; while(i<row && j>=0){ if(matrix[i][j]<target){ i++; }else if(matrix[i][j]>target){ j--; }else{ return true; } } return false; } }