题目链接:https://leetcode-cn.com/problems/search-a-2d-matrix/
难度:中等
描述:
编写一个高效的算法来判断 m x n
矩阵中,是否存在一个目标值。该矩阵具有如下特性:
- 每行中的整数从左到右按升序排列。
- 每行的第一个整数大于前一行的最后一个整数。
提示:m
,n
范围:[1, 100]
题解
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
m, n = len(matrix), len(matrix[0])
# 找到第一个元素小于target的最大的行的坐标
left, right = 0, m - 1
while left <= right:
mid = (left + right) // 2
if matrix[mid][0] > target:
right = mid - 1
elif matrix[mid][0] < target:
left = mid + 1
else:
return True
# 所有元素都比target大
if right < 0:
return False
row = right
left, right = 0, n - 1
while left <= right:
mid = (left + right) // 2
if matrix[row][mid] < target:
left = mid + 1
elif matrix[row][mid] > target:
right = mid - 1
else:
return True
return False