仅供自己学习记录
LeetCode刷题日记2021-3-30
题目描述:
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
示例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
题目概述:
在一个有序数组中查到给定target
解题思路:
1.从右上角或者左下角查找
2.全局二分查找
代码:
1.从右上角查找:
rows=len(matrix)
cols=len(matrix[0])
row,col=0,cols-1
while True:
if row<rows and col>=0:
if matrix[row][col]==target:
return True
#target大于当前元素 则让行增加
#target小于当前元素则让列减少
elif matrix[row][col]<target:
row+=1
else:
col-=1
else:
return False
2.二分查找:
rows=len(matrix)
cols=len(matrix[0])
left,right=0,rows*cols-1
while left<=right:
mid=left+(right-left)//2
cur=matrix[mid//cols][mid%cols]
if cur==target:
return True
elif cur<target:
left=mid+1
else:
right=mid-1
return False
题解思路来源:
https://leetcode-cn.com/problems/search-a-2d-matrix/solution/fu-xue-ming-zhu-liu-chong-fang-fa-bang-n-e20z/