当前位置: 首页> 游戏> 攻略 > 企业电话号码查询网_网站游戏入口_蚁百杭州网站seo优化_站长之家点击进入

企业电话号码查询网_网站游戏入口_蚁百杭州网站seo优化_站长之家点击进入

时间:2025/7/9 14:32:42来源:https://blog.csdn.net/qq_51906990/article/details/146923210 浏览次数:1次
企业电话号码查询网_网站游戏入口_蚁百杭州网站seo优化_站长之家点击进入

题目:

给一个满足两条属性的m*n的整数矩阵:

每行中的整数从左到右按非严格递增顺序排列

每行的第一个整数大于前一行的最后一个整数

给一个整数target,如果target在矩阵中,返回true,否则返回false


方法一:两次二分查找

由于每行的第一个元素大于前一行的最后一个元素,且每行元素是升序的,所以每行的第一个元素大于前一行的第一个元素,因此矩阵第一列的元素是升序的。

对矩阵的第一列元素二分查找,找到最后一个不大于目标值的元素,然后在该元素所在行中二分查找目标是否存在

class Solution(object):def searchMatrix(self, matrix, target):""":type matrix: List[List[int]]:type target: int:rtype: bool"""row=bisect.bisect_right([row[0] for row in matrix],target)#用列表推导式获取所有行的第一个元素组成列表,返回的是第一个大于target的行首元素的位置if row==0: #如果row为0,表示所有行的第一个元素都大于target,矩阵中不可能存在该值return Falsetarget_row=matrix[row-1]#获取可能包含target的行(row-1位置的这一行)pos=bisect.bisect_left(target_row,target)#在目标行中使用bisect_left进行二分查找,找到target应该插入的位置return pos<len(target_row)and target_row[pos]==target#检查找到的位置是否有效且该位置的元素确实等于target

时间复杂度:O(logm+logn)=O(logmn),其中mn分别是矩阵的行数和列数

空间复杂度:O(1)


方法二:一次二分查找

若将矩阵每一行拼接在上一行的末尾,则会得到一个升序数组,我们可以在该数组上二分找到目标元素。

class Solution(object):def searchMatrix(self, matrix, target):""":type matrix: List[List[int]]:type target: int:rtype: bool"""m, n = len(matrix), len(matrix[0])left, right = -1, m * nwhile left + 1 < right:mid = (left + right) // 2x = matrix[mid // n][mid % n]  #获取行列坐标if x == target:return Trueif x < target:left = midelse:right = midreturn False

时间复杂度:O(logm+logn)=O(logmn),其中mn分别是矩阵的行数和列数

空间复杂度:O(1)

源自力扣官方题解和灵茶山艾府

 

关键字:企业电话号码查询网_网站游戏入口_蚁百杭州网站seo优化_站长之家点击进入

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: