写一个高效的程序来寻找 m * n 矩阵中的一个元素。矩阵中的元素是排好序的。
例子:
Input: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] target = 3 Output: true Input: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] target = 13 Output: false
这个题目我们可以直接用一层循环 for row in matrix: if target in row: return True;或者用 numpy 来 return target in {*numpy.array(matrix).ravel()} 拍平(或者resize)查找一下(但这个很慢)。其实,这两种方法复杂度都是 O(n*n)。为了降一下复杂度(然而并不能降多少 runtime),我们可以用两层二分查找。
for row in matrix: if target in row: return True
return target in {*numpy.array(matrix).ravel()}
class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: if not matrix or not matrix[0]: return False low, high = 0, len(matrix) - 1 while low <= high: mid = (low + high) // 2 if target < matrix[mid][0]: high = mid - 1 else: low = mid + 1 row = matrix[high] low, high = 0, len(row) - 1 while low <= high: mid = (low + high) // 2 if target == row[mid]: return True elif target < row[mid]: high = mid - 1 else: low = mid + 1 return False
最后更新于4年前