题目:
题目链接: https://leetcode-cn.com/problems/search-a-2d-matrix/
解题思路:
因为是严格有序的,所以可以使用二分查找,但是需要稍微修改一下
- 初始化的left = 0
- 初始化的right = m * n - 1
- 假设mid = (left + right) // 2,则当前mid对应的数字的行号 = mid // n,列号 = mid % n
- 其余下标对应的数字,均参考第三项
代码实现:
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
if 0 == len(matrix) or 0 == len(matrix[0]):
return False
left, right = 0, len(matrix) * len(matrix[0]) - 1
while left <= right:
mid = (left + right) // 2
mid_num = matrix[mid // len(matrix[0])][mid % len(matrix[0])]
left_num = matrix[left // len(matrix[0])][left % len(matrix[0])]
right_num = matrix[right // len(matrix[0])][right % len(matrix[0])]
if mid_num == target:
return True
elif left_num <= target < mid_num:
right = mid - 1
else:
left = mid + 1
return False