74. 搜索二维矩阵
双层循环遍历法
一、算法逻辑(逐步通顺讲解每一步思路)
该算法的目标是判断一个给定的目标值 target
是否存在于二维矩阵 matrix
中。
题目给定的矩阵有如下两个特性:
-
每行元素从左到右升序排列;
-
每行的第一个整数大于前一行的最后一个整数(整个矩阵可以视作一个升序的「一维数组」)。
然而,这段代码 没有利用上述性质,而是采取了最简单直接的方式:
✅ 1️⃣ 获取矩阵维度
M = len(matrix)
:总行数;
N = len(matrix[0])
:每行列数。
✅ 2️⃣ 遍历整个矩阵
使用两个嵌套循环,逐个元素遍历二维数组中的每一项:
-
外层循环遍历每一行;
-
内层循环遍历每一列。
✅ 3️⃣ 逐个比对元素值
如果当前元素 matrix[i][j]
等于 target
,直接返回 True
;否则继续查找。
✅ 4️⃣ 未找到则返回 False
所有元素遍历完后未找到目标值,返回 False
。
二、核心点总结
该算法核心非常简单直接:
-
✅ 暴力穷举法:遍历整个二维数组逐个比对元素;
-
❌ 未利用矩阵的有序特性,没有进行任何剪枝或优化;
-
✅ 实现简单,容易理解;
-
❌ 对于大数据量输入效率较低。
换句话说,这是最基础的解法(Baseline),适合初学者理解,但在面试或实际场景中不推荐使用。
python
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
M, N = len(matrix), len(matrix[0])
for i in range(M):
for j in range(N):
if matrix[i][j] == target:
return True
return False
三、时间复杂度分析
共 M 行,每行 N 个元素:
✅ 时间复杂度为 O(M × N)
四、空间复杂度分析
该算法仅使用了常数级别的辅助变量(i
, j
, M
, N
),不依赖任何额外数据结构或递归栈:
✅ 空间复杂度为 O(1)
✅ 总结一句话
这是一种最朴素的暴力搜索解法 ,时间复杂度为 O(M×N),空间复杂度 O(1),实现简单但未利用矩阵的有序性质,适合新手理解,不适合实际使用或面试场景,可进一步优化为「逐行二分查找」或「二维 -> 一维映射 + 二分」的高效解法。