剑指 Offer 04. 二维数组中的查找
思路:
利用题目条件,从右上角看,矩阵是一个二叉搜索树,往左变小,往下变大。
因此可以从右上角开始,如果当前位置元素比 target 大,则行 row++;
如果当前位置元素比 target 小,则列 col--。
这样可以把时间复杂度从暴力搜索的O(nm)降到O(n+m)
代码:
时间复杂度O(m+n),空间复杂度O(1)
class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { if (matrix == null || matrix.length == 0) return false; int m = matrix.length, n = matrix[0].length; int row = 0, col = n-1; //从右上角开始 while (row < m && col >=0) { if (matrix[row][col] < target) row++; //小则往下移 else if (matrix[row][col] > target) col--; //大则往左移 else return true; } return false; } }