题目
思路
排除法:
排除法之所以有效,是因为它借助了矩阵的两个关键特性——每行从左到右递增,每列从上到下递增。这两个特性赋予了起点(右上角)一个独一无二的地位:它是整个矩阵的"鞍点"。
**当前元素 matrix[i][j] 是第 i 行的最大值,同时也是第 j 列的最小值。它像一个天然的 “裁判”,将整个搜索空间清晰地一分为二。**同时,这个 “裁判” 还指出了一个搜索方向:向左会变小,向下会变大。因此,我们可以根据 target 与它的比较,做出唯一的决定。
反向思考一下,就能明白为什么起点不能是左上角。如果从左上角(最小值)开始,当 target 更大时,向右和向下两个方向都是未知的,我们无法立刻做出排除一整行或一整列的决定。而右上角的“左小下大”特性,完美避免了这种“两难”困境。
相似题目
1351. 统计有序矩阵中的负数,加深对排除法的理解
代码(25 首刷)
func searchMatrix(matrix [][]int, target int) bool {
m, n := len(matrix), len(matrix[0])
i, j := 0, n - 1
for i < m && j >= 0 {
if matrix[i][j] == target {
return true
}
if matrix[i][j] < target {
i++
}else {
j--
}
}
return false
}



被折叠的 条评论
为什么被折叠?



