現有矩陣 matrix 以下:java
[ [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
。python
給定 target = 20
,返回 false
。算法
這道題本質上就是遍歷二維數組,咱們能夠直接遍歷,可是因爲數組中的數據是存在規律的(下大於上、右大於左),因此咱們能夠根據其規律,對其進行相似於「剪枝」的操做。編程
這裏咱們是從左下角開始遍歷的,即示例中的18。這樣遍歷的好處是,比18大的元素,都在其右側,比18小的元素,都在其上方。數組
若是從1開始遍歷,不管是下方元素,仍是右側元素,都是大於1的。須要額外進行比較(比較下方和右側元素和target的大小)。app
class Solution { public boolean searchMatrix(int[][] matrix, int target) { // check if (matrix == null || matrix.length == 0) { return false; } if (matrix[0] == null || matrix[0].length == 0) { return false; } // 肯定邊界 int bottom = matrix.length - 1; int right = matrix[0].length - 1; // 肯定起點 int i = bottom, j = 0; while (i >= 0 && j <= right) { if (matrix[i][j] > target) { i--; } else if (matrix[i][j] < target) { j++; } else { return true; } } return false; } }
class Solution: def searchMatrix(self, matrix, target): # check if not matrix and len(matrix) == 0: return False if not matrix[0] and len(matrix[0]) == 0: return False # 肯定邊界 bottom, right = len(matrix) - 1, len(matrix[0]) - 1 i, j = bottom, 0 while i >= 0 and j <= right: if matrix[i][j] > target: i -= 1 elif matrix[i][j] < target: j += 1 else: return True return False