【二维数组】力扣240:搜索二维矩阵Ⅱ

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

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

image
输入: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

如果直接查找:时间复杂度:O(mn),空间复杂度:O(1)。

二分查找(Z字形查找)

class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        m, n = len(matrix), len(matrix[0]) # 行数和列数
        if m == 0:
            return False # 判断是否是空矩阵
        i = 0
        j = n - 1
        while i < m and j >= 0:
            if target == matrix[i][j]:
                return True
            elif target < matrix[i][j]:
                j -= 1
            else:
                i += 1
        return False

时间复杂度:O(m + n)。在搜索的过程中,如果没有找到 target,那么我们要么将 j 减少 1,要么将 i 增加 1。由于 (i, j) 的初始值分别为 (0, n-1),因此 j 最多能被减少 n 次,i 最多能被增加 m 次,总搜索次数为 m + n。在这之后,i 和 j 就会超出矩阵的边界。
空间复杂度:O(1)。

posted @   Vonos  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
点击右上角即可分享
微信分享提示