【Python】Leetcode 240. 搜索二维矩阵 II - 削减矩阵+递归,击败88%

描述

  1. 搜索二维矩阵 II

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。

该矩阵具有以下特性:

每行的元素从左到右升序排列。

每列的元素从上到下升序排列。

思路

确定左右及上下限,削减矩阵,递归。

注意判断四个端点是否等于target,若有满足的返回true,否则判断左上角端点或右下角端点是否大于或小于target,满足则返回false,否则递归直到上下限溢出返回false。

可以证明,在以上判断条件下,每次递归都会导致矩阵被削减,时间复杂度为O(m+n)

复杂度

时间复杂度:

O(m+n)

空间复杂度:

O(1)

`class Solution:

def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:

l = 0

r = len(matrix[0])-1

t = 0

b = len(matrix)-1

return self.dfs(matrix,l,r,t,b,target)

复制代码
def dfs(self,matrix,l,r,t,b,target):
    print(l,r,t,b)
    if(r<l or b<t): return False
    if(matrix[t][l] == target or matrix[b][r] == target or matrix[t][r] == target or matrix[b][l] == target): return True
    if(matrix[t][l] > target): return False
    if(matrix[b][r] < target): return False
    n_r = r
    for i in range(r-l+1):
        if(matrix[t][r-i] <= target):
            n_r = r-i
            break
    
    n_l = l
    for i in range(r-l+1):
        if(matrix[b][l+i] >= target):
            n_l = l+i
            break
    
    n_b = b
    for i in range(b-t+1):
        if(matrix[b-i][l] <= target):
            n_b = b-i
            break
    
    n_t = t
    for i in range(b-t+1):
        if(matrix[t+i][r] >= target):
            n_t = t+i
            break

    return self.dfs(matrix,n_l,n_r,n_t,n_b,target)`
相关推荐
m0_734949793 分钟前
PHP怎么使用Eloquent Attribute Synthesis属性合成_Laravel多源数据融合【指南】
jvm·数据库·python
Fleshy数模7 分钟前
玩转 Python:多线程、装饰器、视觉检测与正则匹配实战
开发语言·python·视觉检测
Lucas_coding8 分钟前
【xiaozhi-esp32-server-服务端全模块启动】 xiaozhi-server 获取6位有效验证码
python
❆VE❆10 分钟前
python实战(一):对接AI大模型并应用
开发语言·人工智能·python·ai
上善若水202011 分钟前
【定制开发】ENC设备视频矩阵功能介绍
线性代数·矩阵·音视频
qq_3729069312 分钟前
CSS怎么在flex布局中实现项目均分间距_设置justify-content space-evenly
jvm·数据库·python
踩坑记录13 分钟前
leetcode hot100 416. 分割等和子集 medium 动态规划 01背包 DFS深度优先搜索
leetcode·深度优先·动态规划
yangtuoni16 分钟前
vscode调试C++ python相关配置
c++·vscode·python
小章UPUP22 分钟前
2026 信息技术中考复习资料大全
python
2401_8822737223 分钟前
CSS 背景色无法撑满父容器?解决浮动导致的高度塌陷问题
jvm·数据库·python