二分法
思路:
方法①:由于矩阵是有序的,先二分法找到所在行,再二分法找到所在列。
方法②:根据行列映射关系,直接二分法查找二维矩阵。
代码一:
class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: if not matrix or not matrix[0]: return False rowSize = len(matrix) colSize = len(matrix[0]) rowl = 0 rowr = rowSize-1 while rowl<rowr: rowmid = (rowl+rowr)//2 if matrix[rowmid][colSize-1] >= target: rowr = rowmid else: rowl = rowmid+1 l = 0 r = colSize-1 while l <= r: mid = (l+r)//2 if matrix[rowr][mid] > target: r = mid -1 elif matrix[rowr][mid] < target: l = mid +1 else: return True return False
代码二:
class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: m = len(matrix) if m == 0: return False n = len(matrix[0]) left, right = 0, m * n - 1 while left <= right: mid = (left + right) // 2 midElement = matrix[mid // n][mid % n] if target == midElement: return True else: if target < midElement: right = mid - 1 else: left = mid + 1 return False
原文:https://www.cnblogs.com/nilhxzcode/p/13097347.html