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 < matrix[i][n - 1]:

return binaSearch(i, n - 1, target)

elif target > matrix[i][n - 1]:

i += 1

else:

return True

return False

2)在二分查找中注意,target对比的元素为matrix[i][mid],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。

相关推荐
Java后端的Ai之路5 小时前
【Python 教程15】-Python和Web
python
冬奇Lab6 小时前
一天一个开源项目(第15篇):MapToPoster - 用代码将城市地图转换为精美的海报设计
python·开源
种时光的人8 小时前
CANN仓库核心解读:catlass夯实AIGC大模型矩阵计算的算力基石
线性代数·矩阵·aigc
那个村的李富贵8 小时前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
二十雨辰8 小时前
[python]-AI大模型
开发语言·人工智能·python
power 雀儿8 小时前
Scaled Dot-Product Attention 分数计算 C++
算法
Yvonne爱编码8 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
熬夜有啥好8 小时前
数据结构——哈希表
数据结构·散列表
琹箐9 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
前端摸鱼匠9 小时前
YOLOv8 环境配置全攻略:Python、PyTorch 与 CUDA 的和谐共生
人工智能·pytorch·python·yolo·目标检测