74. 搜索二维矩阵

问题链接

https://leetcode.cn/problems/search-a-2d-matrix/description/

解题思路

我们可以确定,数据是有序的。所以我们有2种办法用二分来解决。

第一种,我们可以写个下标映射函数,把矩阵当做一维数组来进行遍历。

第二种,我们可以先对列进行二分,得到数据存在于哪个行。

然后对这个行进行二分,得到数据存在与否。

此时我们选择第二种方式。

代码

复制代码
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        left, right = 0, len(matrix)-1
        target_idx = -1
        while left <= right:
            mid = (left+right)>>1
            if matrix[mid][0]<=target<=matrix[mid][-1]:
                target_idx = mid
                break
            elif matrix[mid][0]>target:
                right = mid - 1
            else:
                left = mid + 1
        if target_idx == -1:
            return False
        left, right = 0, len(matrix[target_idx])-1
        while left <= right:
            mid = (left+right)>>1
            if matrix[target_idx][mid] == target:
                return True
            elif matrix[target_idx][mid] < target:
                left = mid + 1
            else:
                right = mid - 1
        return False
复制代码

 二刷:

复制代码
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        up, down = 0, len(matrix)-1
        while up <= down:
            ud_mid = (up + down) >> 1
            if matrix[ud_mid][0] <= target <= matrix[ud_mid][-1]:
                left, right = 0, len(matrix[ud_mid])-1
                while left <= right:
                    mid = (left+right)>>1
                    if matrix[ud_mid][mid] == target:
                        return True
                    elif matrix[ud_mid][mid] < target:
                        left = mid + 1
                    else:
                        right = mid - 1
                return False
            elif matrix[ud_mid][0] > target:
                down = ud_mid - 1
            else:
                up = ud_mid + 1
        return False
复制代码

 

posted @   BJFU-VTH  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示