LeetCode in Python 74/240. Search a 2D Matrix I/II (搜索二维矩阵I/II)

搜索二维矩阵I其实可以转换为搜索一维数组,原因在于,只要先确定搜索的整数应该在哪一行,即可对该行进行二分查找。

搜索二维矩阵II中矩阵元素排列方式与I不同,但思想大致相同。

目录

[LeetCode in Python 74.](#LeetCode in Python 74.)

[LeetCode in Python 240.](#LeetCode in Python 240.)

LeetCode in Python 74.

示例:

图1 搜索二维矩阵输入输出示例

代码:

python 复制代码
class Solution:
    def searchMatrix(self, matrix, target):
        m, n = len(matrix), len(matrix[0])
        
        def binaSearch(i, j, target):
            l, r = 0, j
            while l <= r:
                mid = (l + r) // 2
                if target > matrix[i][mid]:
                    l = mid + 1
                elif target < matrix[i][mid]:
                    r = mid - 1
                else:
                    return True
            return False

        for i in range(m):
            if target < matrix[i][n - 1]:
                return binaSearch(i, n - 1, target)
            elif target > matrix[i][n - 1]:
                i += 1
            else:
                return True
        return False

解释:

1)首先要判断target可能在哪一行,判断标准是将target与矩阵每一行最后一个元素比较,若大于该元素,则表明target在下一行,反之在这一行(按序一行一行比较)。在确定在哪一行之后,利用二分法在该行查找是否有target,有则True,无则False:

for i in range(m):

if target < matrixin - 1:

return binaSearch(i, n - 1, target)

elif target > matrixin - 1:

i += 1

else:

return True

return False

2)在二分查找中注意,target对比的元素为matriximid,i代表target可能存在的行,即传过去的参数i。

LeetCode in Python 240.

示例:

图2 搜索矩阵II输入输出示意图

代码:

python 复制代码
class Solution:
    def searchMatrix(self, matrix, target):
        m, n = len(matrix), len(matrix[0])
        r, c = m - 1, 0
        while r >= 0 and c < n:
            if target > matrix[r][c]:
                c += 1
            elif target < matrix[r][c]:
                r -= 1
            else:
                return True
        return False 

解释:

1)先确定列再确定行,即从矩阵左下角元素开始比较,target>该元素则右移,反之上移直到找到target返回True或无target返回False。

相关推荐
花酒锄作田26 分钟前
Pydantic校验配置文件
python
hboot42 分钟前
AI工程师第四课 - 深度学习入门
pytorch·python·神经网络
罗西的思考4 小时前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
CSharp精选营6 小时前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
美团技术团队7 小时前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
ZhengEnCi11 小时前
P2M-Matplotlib折线图完全指南-从数据可视化到趋势分析的Python绘图利器
python·matlab·数据可视化
ZhengEnCi13 小时前
P2L-Matplotlib饼图完全指南-从数据可视化到图表定制的Python绘图利器
python·matlab
曲幽13 小时前
你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南
python·fastapi·web·graphql·route·cors·rest·strawberry
用户83580861879114 小时前
基于 Self-RAG 与列表级重排序的进阶 RAG 系统设计与实现
python
To_OC1 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode