题目
Write an efficient algorithm that searches for a value in an m x n matrix.
This matrix has the following properties:
Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
Have you met this question in a real interview?
Yes
Example
Consider the following matrix:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
Given target = 3, return true.
Challenge
O(log(n) + log(m)) time
Tags
Binary Search Matrix Yahoo
思路
直接判断每一行最右端数字,节省时间。
代码
class Solution:
"""
@param: matrix: matrix, a list of lists of integers
@param: target: An integer
@return: a boolean, indicate whether matrix contains target
"""
def binary_search(self, nums, target):
start = 0; end = len(nums) - 1
while start <= end:
mid = start + (end - start) // 2
if nums[mid] == target:
return True
if nums[mid] < target:
start = mid + 1
else:
end = mid - 1
return False
def searchMatrix(self, matrix, target):
# write your code here
for i in range(len(matrix)):
if target > matrix[i][-1]:
continue
return self.binary_search(matrix[i], target)
return False