【二维数组】力扣240:搜索二维矩阵Ⅱ
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
示例:
输入: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)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探