zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【Leetcode刷题Python】74. 搜索二维矩阵

PythonLeetCode搜索 矩阵 刷题 二维 74
2023-09-14 09:12:59 时间

1 题目

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。

示例 1:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

在这里插入图片描述

示例 2:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false

2 解析

(1)方法一
从右上角开始搜索
(2)方法二
二分查找,

3 Python实现

(1)

class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        # 方法二:从右上角开始搜索
        m = len(matrix)
        n = len(matrix[0])
        i,j = 0,n-1
        while i<m and j>=0:
            cur = matrix[i][j]
            if cur ==target :return True
            elif cur<target: i+=1
            else:j-=1
        return False

(2)

class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        # 方法一:二分查找
		m = len(matrix)
        n = len(matrix[0])
        l,r = 0,m*n
        while l<r:
            i,j = divmod((l+r)//2,n)
            x = matrix[i][j]
            if x<target:
                l = i *n+j+1
            elif x>target:
                r = i*n+j
            else:
                return True
        return False