题目链接:https://leetcode-cn.com/problems/search-a-2d-matrix/
难度:中等

描述:
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

  • 每行中的整数从左到右按升序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

提示:
mn范围:[1, 100]

题解

  1. class Solution:
  2. def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
  3. m, n = len(matrix), len(matrix[0])
  4. # 找到第一个元素小于target的最大的行的坐标
  5. left, right = 0, m - 1
  6. while left <= right:
  7. mid = (left + right) // 2
  8. if matrix[mid][0] > target:
  9. right = mid - 1
  10. elif matrix[mid][0] < target:
  11. left = mid + 1
  12. else:
  13. return True
  14. # 所有元素都比target大
  15. if right < 0:
  16. return False
  17. row = right
  18. left, right = 0, n - 1
  19. while left <= right:
  20. mid = (left + right) // 2
  21. if matrix[row][mid] < target:
  22. left = mid + 1
  23. elif matrix[row][mid] > target:
  24. right = mid - 1
  25. else:
  26. return True
  27. return False