240. 搜索二维矩阵 II

Problem: 240. 搜索二维矩阵 II

文章目录

思路

最干脆的方法是分别遍历矩阵的每一行和每一列,时间复杂度为 O ( n 2 ) O(n^2) O(n2),空间复杂度为 O ( 1 ) O(1) O(1)

由于行和列都是有序的,所以可以考虑二分查找,也可以分为两种方法

方法一:可以直接对行和列分别进行二分, 时间复杂度为 O ( m i n ( n , m ) l o g n ) O(min(n,m)logn) O(min(n,m)logn),空间复杂度为 O ( 1 ) O(1) O(1)

方法二:可以先对对角线进行二分,然后再分别对行和列进行二分,时间复杂度为 O ( m i n ( n , m ) l o g n ) O(min(n,m)logn) O(min(n,m)logn),空间复杂度为 O ( 1 ) O(1) O(1),但是这个要比方法一优化一些

解题方法

二分查找

复杂度

时间复杂度: O ( m i n ( n , m ) l o g n ) O(min(n,m)logn) O(min(n,m)logn)

空间复杂度: O ( 1 ) O(1) O(1)

Code

Python3 复制代码
class Solution:
    # 遍历行,行不变,变得是列
    def binary_search_row(self, matrix, target, begin, cols):
        l = begin
        r = cols
        while l < r:
            mid = l + r + 1 >> 1
            if matrix[begin][mid] <= target:
                l = mid
            else:
                r = mid - 1
        return begin<=l<=cols and matrix[begin][l] == target
        
    # 遍历列,列不变,行变
    def binary_search_col(self, matrix, target, begin, rows):
        l = begin
        r = rows
        while l < r:
            mid = l + r + 1 >> 1
            if matrix[mid][begin] <= target:
                l = mid
            else:
                r = mid - 1
        return begin<=l<=rows and matrix[l][begin] == target


    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        # 依次二分查找对角线、行和列
        m, n = len(matrix), len(matrix[0])
        # 遍历对角线
        min_val = min(m, n)
        l, r = 0, min_val - 1
        while l < r:
            mid = l + r + 1>> 1
            if matrix[mid][mid] <= target:
                l = mid
            else: 
                r = mid - 1
        if matrix[l][l] == target:
            return True
        
        for i in range(l + 1):
            if self.binary_search_row(matrix, target, i, n - 1) or self.binary_search_col(matrix, target, i, m - 1):
                return True
        return False
相关推荐
KaMeidebaby3 小时前
卡梅德生物技术快报|PD1 单克隆抗体定制配套 N 糖全谱质控开发
前端·人工智能·算法·数据挖掘·数据分析
8Qi83 小时前
LeetCode 235. 二叉搜索树的最近公共祖先(LCA)
算法·leetcode·二叉树·递归·二叉搜索树·lca·迭代
bIo7lyA8v4 小时前
算法稳定性分析中的随机扰动建模的技术8
算法
科研online4 小时前
基于多源数据和XGBoost-SHAP分析中国大陆绿地碳汇空间变异影响因素的非线性相关性与尺度差异
算法·学习方法
Cthy_hy5 小时前
拓扑排序超详解:原理 + Kahn 贪心算法
python·算法·贪心算法
三品吉他手会点灯5 小时前
C语言学习笔记 - 43.运算符与表达式 - 运算符1 - 运算符的分类和简单介绍
c语言·笔记·学习·算法
VkN2X2X4b5 小时前
算法复杂度的实验验证与误差分析的技术8
算法
其利天下技术5 小时前
风扇灯无刷电机自适应算法实战指南
算法·cocos2d·无刷电机自适应算法·bldc驱动自适应算法·其利无刷电机驱动算法
8Qi85 小时前
LeetCode 494:目标和(Target Sum)—— 题解 ✅
算法·leetcode·职场和发展·动态规划·01背包
hujinyuan201606 小时前
2026年3月 中国电子学会青少年软件编程(Python)三级考试试卷 真题及答案
java·python·算法