📅  最后修改于: 2023-12-03 15:41:09.451000             🧑  作者: Mango
给定一个二维矩阵和一个目标值,判断矩阵中是否存在这个目标值。该矩阵具有以下特性:
示例1:
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true
示例2:
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false
直接遍历矩阵中的每一个元素,然后和目标值进行比较。
def searchMatrix(matrix, target):
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j] == target:
return True
return False
时间复杂度:$O(mn)$
空间复杂度:$O(1)$
对于每一行,使用二分法查找出是否存在目标值。
def searchMatrix(matrix, target):
if not matrix or not matrix[0]:
return False
n = len(matrix[0])
for i in range(len(matrix)):
if matrix[i][0] <= target <= matrix[i][n-1]:
left, right = 0, n-1
while left <= right:
mid = (left + right) // 2
if matrix[i][mid] == target:
return True
elif matrix[i][mid] < target:
left = mid + 1
else:
right = mid - 1
return False
时间复杂度:$O(m \log n)$
空间复杂度:$O(1)$
对于每一行的最后一个数,使用二分法查找出是否存在目标值所在的行,然后对该行使用二分法查找出是否存在目标值。
def searchMatrix(matrix, target):
if not matrix or not matrix[0]:
return False
def binary_search_row(matrix, target):
left, right = 0, len(matrix)-1
while left <= right:
mid = (left + right) // 2
if matrix[mid][0] <= target <= matrix[mid][-1]:
return mid
elif matrix[mid][-1] < target:
left = mid + 1
else:
right = mid - 1
return -1
def binary_search_col(matrix, row, target):
left, right = 0, len(matrix[0])-1
while left <= right:
mid = (left + right) // 2
if matrix[row][mid] == target:
return True
elif matrix[row][mid] < target:
left = mid + 1
else:
right = mid - 1
return False
row = binary_search_row(matrix, target)
if row == -1:
return False
return binary_search_col(matrix, row, target)
时间复杂度:$O(\log m+\log n)$
空间复杂度:$O(1)$