leetcode74. 搜索二维矩阵——二分搜索
作者:互联网
74. 搜索二维矩阵
编写一个高效的算法来判断
m x n
矩阵中,是否存在一个目标值。该矩阵具有如下特性:
- 每行中的整数从左到右按升序排列。
- 每行的第一个整数大于前一行的最后一个整数。
提示:
- m == matrix.length
- n == matrix[i].length
- 1 <= m, n <= 100
- -104 <= matrix[i] [j], target <= 104
题目链接:74. 搜索二维矩阵 - 力扣(LeetCode) (leetcode-cn.com)
全局二分法
思路
由题意可知按照从左到右从上到下的循序是递增的,我们可以转化成一维来做。
但是又不必真的将二维数组存到新的一维数组中,会增加时间和内存。
- 设置左右两个指针
left = 0
和right = m*n-1
- 中间指针
mid = (left+right)//2
- 退出循环条件
left <= right
- 一维数组的指针怎么转换到二维数组
- 二维数组的行
mid//n
- 二维数组的列
mid%n
- 二维数组的行
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
if not matrix or not matrix[0]:
return False
m = len(matrix)
n = len(matrix[0])
if target < matrix[0][0] or target > matrix[-1][-1]:
return False
# 初始化指针
left = 0
right = m*n - 1
while(left <= right):
mid = (left+right)//2
if matrix[mid//n][mid%n] == target:
return True
elif matrix[mid//n][mid%n] < target:
left = mid + 1
elif matrix[mid//n][mid%n] > target:
right = mid - 1
return False
标签:二分,right,matrix,leetcode74,二维,搜索,数组,target,left 来源: https://www.cnblogs.com/waitting975/p/15317571.html