240. 搜索二维矩阵 II(中等)

240. 搜索二维矩阵 II

编写一个高效的算法来搜索 m xn 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

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

示例 1:

复制代码
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true

示例 2:

复制代码
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= n, m <= 300
  • -109 <= matrix[i][j] <= 109
  • 每行的所有元素从左到右升序排列
  • 每列的所有元素从上到下升序排列
  • -109 <= target <= 109

最无脑的暴力解:

python 复制代码
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        m=len(matrix)
        n=len(matrix[0])
        for i in range(m):
            for j in range(n):
                if matrix[i][j]==target: return True
        return False

就是直接遍历全矩阵,找到返回true,没找到返回false。

最优解:

python 复制代码
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:
            if matrix[i][j] == target:
                return True
            elif matrix[i][j] < target:
                i += 1  # 当前行太小,下移
            else:
                j -= 1  # 当前列太大,左移
        
        return False

从右上角开始遍历矩阵,因为右边一列就是每一行中最大的数。如果最右边那一列的值比目标值小,那么下移找更大的,如果大那么左移找更小的。

  • 时间复杂度:O(m+n),不是 O(mn)

  • 空间复杂度:O(1)

  • 最坏情况:从右上角到左下角,走 m+n-1 步

相关推荐
伊玛目的门徒1 小时前
试用leetcode之典中典 二数之和问题
java·算法·leetcode
糯米导航1 小时前
AI 视觉回归实战:截图对比不是“找不同”,如何让智能差异分析真正服务 UI 质量
人工智能·ui·回归
Jerry2 小时前
LeetCode 226. 翻转二叉树
算法
科技圈观察2 小时前
2026年好伴AI医疗专用大模型应用梳理与梯队参考
人工智能
jkyy20142 小时前
深耕AI健康医疗数据智库,赋能企业构建主动健康管理新生态
大数据·人工智能·健康医疗
cd_949217213 小时前
3D角色自动绑骨怎么做?用V2Fun完成建模、绑定、动作和导出
人工智能·3d
瑞禧生物tech3 小时前
SH-PEG-Biotin巯基-聚乙二醇-生物素 HS-PEG-Bio 深度解析
人工智能
QYR-分析3 小时前
机器人安全控制器行业高速扩容 本土替代迎来全新发展窗口期
人工智能·安全·机器人
想做小南娘,发现自己是女生喵3 小时前
【无标题】
数据结构·算法
冬奇Lab3 小时前
MCP 系列(06):MCP vs Function Calling——用数据说话的选型指南
人工智能