[LeetCode]74. Search a 2D Matrix
74. Search a 2D Matrix
二分查找
class Solution(object):
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
if not matrix:
return False
start_row, end_row = 0, len(matrix) - 1
start_col, end_col = 0, len(matrix[0]) - 1
while start_row <= end_row and start_col <= end_col:
mid_row, mid_col = (start_row + end_row) // 2, (start_col + end_col) // 2
if matrix[mid_row][mid_col] == target:
return True
if matrix[mid_row][mid_col] < target:
if matrix[mid_row][-1] < target:
start_row = mid_row + 1
else:
start_col = mid_col + 1
else:
if matrix[mid_row][0] > target:
end_row = mid_row - 1
else:
end_col = mid_col - 1
return False
class Solution(object):
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
if not matrix or not matrix[0]:
return False
j = 0
row = -1
for i in xrange(len(matrix)):
if i == len(matrix) - 1:
if target >= matrix[i][j]:
row = i
else:
if matrix[i][j] <= target and target < matrix[i+1][j]:
row = i
if row == -1:
return False
if bisect.bisect_left(matrix[row], target) == len(matrix[0]):
return False
else:
return matrix[row][bisect.bisect_left(matrix[row], target)] == target

关注公众号:数据结构与算法那些事儿,每天一篇数据结构与算法