74:搜索二维矩阵
程序员文章站
2022-05-20 13:47:01
...
问题描述
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
- 每行中的整数从左到右按升序排列。
- 每行的第一个整数大于前一行的最后一个整数。
示例
输入:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
输出: true
输入:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 13
输出: false
思路
这题其实就是把升序一维数组存储在了二维数组中,一个朴素的解法就是把它还原成一维数组再进行二分。这样的话复杂度很高,因为要还原一维数组。
有没有办法把二维数组当一维用呢? 可以的。我们可以根据一维数组推算出二维数组中的坐标。
AC代码
class Solution:
def searchMatrix(self, matrix, target: int) -> bool:
left = 0
if len(matrix) == 0:
return False
if len(matrix[0]) == 0:
return False
width = len(matrix[0])
right = len(matrix)*width-1
while left <= right:
mid = (left + right) // 2
if matrix[mid//width][mid%width] == target:
return True
elif matrix[mid//width][mid%width] < target:
left = mid + 1
else:
right = mid - 1
return False
s = Solution()
print(s.searchMatrix([
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
],13))
上一篇: 73:矩阵置零
下一篇: 80:删除排序数组中的重复项II