首页 > 其他分享 >74. 搜索二维矩阵

74. 搜索二维矩阵

时间:2023-01-12 00:33:12浏览次数:36  
标签:right target idx 矩阵 mid 二维 74 left matrix

问题链接

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

 

标签:right,target,idx,矩阵,mid,二维,74,left,matrix
From: https://www.cnblogs.com/bjfu-vth/p/17045267.html

相关文章

  • CF1774E
    Problem-1774E-Codeforces思维好题+技巧好题*1900Cirno_9baka有一棵包含 n 个节点的树。他愿意把它与你分享,这意味着你可以对它进行一些操作。最初,树的 1 号......
  • C++ 使用 new 创建二维数组
    1.直接创建C++使用new创建二维数组最直接的方法就是newT[M][N]。返回的指针类型是T(*)[N],它是指向数组的指针,可以直接使用数组下标形式访问元素。释放内存直接使......
  • 四分五裂的原理图符号-设计74HC14的库文件-PCB系列教程2-4
     第二块PCB案例,还会用到几个元器件,本文讲解怎么设计它们的库文件。其中74HC14的原理图符号是四分五裂,有点意思。 绘制含有子部件的原理图符号有些元件包含多个功能模块,在......
  • 电子设计教程51:16*16LED点阵屏驱动-74HC238译码器
      我尝试通过移位寄存器级联+三八译码器,实现用3跟控制线,驱动16*16LED点阵屏的效果。这是第三篇博客,讲述三八译码器的工作原理。  当驱动8×8LED点阵时,单片机至少需要发......
  • 电子设计教程49:16*16LED点阵屏驱动-74HC595的原理
      我尝试通过移位寄存器级联+三八译码器,实现用3跟控制线,驱动16*16LED点阵屏的效果。这是第一篇博客,讲述74HC595芯片的工作原理  一般情况下,使用单片机来控制LED。一个引......
  • 电子设计教程47:流水灯电路-74HC245驱动器
      上一节提到,如果想控制多于8个LED,74HC164就有点带不动了,就需要接功率更大的芯片了。这个芯片的功能是输入较小的电流,输出较大的电流,这种芯片被称为是驱动器。一般常用74H......
  • 电子设计教程46:流水灯电路-74HC164串入并出芯片
      电路中已经有了74HC165,并入串出,获取几个拨码开关的状态,还需要一个串入并出的芯片,来控制几个LED。74HC164芯片与74HC165相对应,可以实现串入并出的功能。  它有两个串......
  • 电子设计教程45:流水灯电路-74HC165并入串出芯片
      流水灯电路用拨码开关来控制某个LED亮灭,但是又不想让开关与LED一一对应,因为对应的太死,就没办法实现流水的效果。可以先用一个“并入串出”芯片,获取所有拨码开关的状态,再......
  • 电子设计教程44:流水灯电路-应用74HC14施密特反相器
      上一节的非对称式多谐振荡器,要用反相器产生,本节电路做了一些优化,使用带有施密特功能的反向触发器。关于施密特触发器的知识,可以翻看滞回比较器这一节。  施密特触发......
  • 看图要仔细-设计74HC165的原理图库文件-PCB系列教程2-2
    ​​上一篇文章​​是画LED的库文件,这一篇画的稍微复杂一点点,以一个16脚的芯片做案例,讲讲如何设计原理图文件,下一篇讲讲如何设计PCB库文件。74HC165的数据手册设计任何芯片......