直接两个for循环,本来是想用二分的,但是常规二分没法确定后续的划分范围,直接暴力遍历
时间:\(O(MN)\)
空间:\(O(1)\)
class Solution: def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool: if not matrix or not matrix[0]: return False for i in matrix: for j in i: if target == i: return True return False
利用数组从上到下和从左到右都为递增的特点,从数组右上角开始,每次缩小一行或者一列的范围,如果target大于该值,则可以直接向下移动一行,如果target小于该值,则可以向左移动一列,直到找到target或者遍历结束。
时间:\(O(M+N)\)
空间:\(O(1)\)
class Solution: def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool: i = 0 if len(matrix) == 0: return False j = len(matrix[0]) - 1 while i < len(matrix) and j >= 0: if matrix[i][j] == target: return True elif matrix[i][j] < target: i += 1 else: j -= 1 return False