)
240. 搜索二维矩阵 II编写一个高效的算法来搜索mxn矩阵matrix中的一个目标值target。该矩阵具有以下特性每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例 1输入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示例 2输入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 20输出false提示m matrix.lengthn matrix[i].length1 n, m 300-109 matrix[i][j] 109每行的所有元素从左到右升序排列每列的所有元素从上到下升序排列-109 target 109最无脑的暴力解class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) - bool: mlen(matrix) nlen(matrix[0]) for i in range(m): for j in range(n): if matrix[i][j]target: return True return False就是直接遍历全矩阵找到返回true没找到返回false。最优解class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) - bool: m len(matrix) # 行数 n len(matrix[0]) # 列数 i, j 0, n-1 # 从右上角开始 while i m and j 0: if matrix[i][j] target: return True elif matrix[i][j] target: i 1 # 当前行太小下移 else: j - 1 # 当前列太大左移 return False从右上角开始遍历矩阵因为右边一列就是每一行中最大的数。如果最右边那一列的值比目标值小那么下移找更大的如果大那么左移找更小的。时间复杂度O(mn)不是 O(mn)空间复杂度O(1)最坏情况从右上角到左下角走 mn-1 步