74. Search a 2D Matrix
You are given an m x n integer matrix matrix with the following two properties:
ArrayExample 1:
- Input:
matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3 - Output:
true
Example 2:
- Input:
matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13 - Output:
false
Constraints:
m == matrix.lengthn == matrix[i].length1 <= m, n <= 100-10^4 <= matrix[i][j], target <= 10^4
Approach
Solution
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
ROWS, COLS = len(matrix), len(matrix[0])
top, bot = 0, ROWS - 1
while top <= bot:
row = (top + bot) // 2
if target > matrix[row][-1]:
top = row + 1
elif target < matrix[row][0]:
bot = row - 1
else:
break
if not (top <= bot):
return False
row = (top + bot) // 2
l, r = 0, COLS - 1
while l <= r:
m = (l + r) // 2
if target > matrix[row][m]:
l = m + 1
elif target < matrix[row][m]:
r = m - 1
else:
return True
return False