search-2d-matrix py3
This commit is contained in:
42
0074_search-a-2d-matrix/python3/solution.py
Normal file
42
0074_search-a-2d-matrix/python3/solution.py
Normal file
@@ -0,0 +1,42 @@
|
||||
class Solution:
|
||||
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
|
||||
'''
|
||||
Two binary searches, first across rows and then
|
||||
across columns to quickly find the target
|
||||
'''
|
||||
|
||||
mid = -1
|
||||
start, end = 0, len(matrix) - 1
|
||||
|
||||
# Figure out which row the number belongs to
|
||||
while start <= end:
|
||||
mid = (start + end) // 2
|
||||
|
||||
if target > matrix[mid][-1]:
|
||||
start = mid + 1
|
||||
elif target < matrix[mid][0]:
|
||||
end = mid - 1
|
||||
else:
|
||||
break
|
||||
|
||||
# If we never managed to find a row, that means number
|
||||
# doesn't exist
|
||||
if not start <= end:
|
||||
return False
|
||||
|
||||
# The row to search
|
||||
row = matrix[mid]
|
||||
start, end = 0, len(row) - 1
|
||||
|
||||
while start <= end:
|
||||
mid = (start + end) // 2
|
||||
|
||||
if target == row[mid]:
|
||||
return True
|
||||
elif target > row[mid]:
|
||||
start = mid + 1
|
||||
else:
|
||||
end = mid - 1
|
||||
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user