240. 搜索二维矩阵 II

中等 含交互动画

学完这道你应该能: 说清它为什么用「右上角搜索」,而不是死记步骤; 合上页面,自己默写出核心代码; 用 30 秒把思路讲清楚。

AI 私教 · 就着本题动画讲
卡住了不用硬扛,按 8 步把这题真正走通。
从读题、试解、找法到手写代码,边问边打勾,适合第一次系统学算法的同学。

题目描述

矩阵每行、每列都升序,判断 target 是否存在。

matrix = 行列均升序, target=5
输出 = true

思路解析

关键不是背模板,而是看懂为什么这题适合矩阵 · 右上角搜索

1. 右上角同时是这一行最大、这一列最小:右上角同时是这一行最大、这一列最小

2. 当前值比 target 大,整列下面更大,左移:当前值比 target 大,整列下面更大,左移

3. 当前值比 target 小,整行左边更小,下移:当前值比 target 小,整行左边更小,下移

4. 每一步排除一行或一列:每一步排除一行或一列

5. 不会回头,路径是折线:不会回头,路径是折线

6. 遇到 5 直接返回 true:遇到 5 直接返回 true

7. 走出边界说明不存在:走出边界说明不存在

8. 复杂度只和行列边长相加有关:复杂度只和行列边长相加有关

把这句话记住,下次遇到同类题,就能更快选出方向。

用一个小问题检查自己是不是真的懂了。

参考代码(Python)

Python
1class Solution:
2    def searchMatrix(self, matrix, target):
3        r, c = 0, len(matrix[0]) - 1
4        while r < len(matrix) and c >= 0:
5            if matrix[r][c] == target:
6                return True
7            if matrix[r][c] > target:
8                c -= 1
9            else:
10                r += 1
11        return False

复杂度分析

  • 时间复杂度:O(m+n) —— 每个核心状态按算法要求处理固定次数
  • 空间复杂度:O(1) —— 只保存必要的辅助结构或递归栈

套路模板

模板不是死背,而是提醒你写代码前先把状态、转移和边界排好。

Python
1# 矩阵 · 右上角搜索 通用检查表
2# 1. 定义状态/指针/容器
3# 2. 每轮只做一个清晰动作
4# 3. 更新答案并处理边界

易错点

  • 错误写法:从左上角开始正确写法:从右上或左下这种能排除一行/列的位置开始(左上太小无法判断该往哪边走)
  • 错误写法:只按样例推代码正确写法:先写清状态含义和边界条件(样例太少,隐藏用例专打边界)
  • 错误写法:变量名和动画不一致正确写法:代码变量沿用动画里的核心名字(学习时最怕脑内维护两套概念)

以上文字与上方动画完全同一思路:先看动画建立直觉 → 读文字巩固 → 关掉页面自己默写一遍代码,能写出来才算真的掌握

下一题 →118. 杨辉三角 ← 返回题库