0240. 搜索二维矩阵 II #
- 标签:二分查找、分治算法
- 难度:中等
题目大意 #
描述:给定一个 $m \times n$ 大小的有序整数矩阵 matrix
。matrix
中的每行元素从左到右升序排列,每列元素从上到下升序排列。再给定一个目标值 target
。
要求:判断矩阵中是否可以找到 target
,如果可以找到 target
,返回 True
,否则返回 False
。
说明:
- $m == matrix.length$。
- $n == matrix[i].length$。
- $1 \le n, m \le 300$。
- $-10^9 \le matrix[i][j] \le 10^9$。
- 每行的所有元素从左到右升序排列。
- 每列的所有元素从上到下升序排列。
- $-10^9 \le target \le 10^9$。
示例:
- 示例 1:
|
|
- 示例 2:
|
|
解题思路 #
思路 1:二分查找 #
矩阵是有序的,可以考虑使用二分查找来做。
- 迭代对角线元素,假设对角线元素的坐标为
(row, col)
。把数组元素按对角线分为右上角部分和左下角部分。 - 对于当前对角线元素右侧第
row
行、对角线元素下侧第col
列分别进行二分查找。- 如果找到目标,直接返回
True
。 - 如果找不到目标,则缩小范围,继续查找。
- 直到所有对角线元素都遍历完,依旧没找到,则返回
False
。
- 如果找到目标,直接返回
思路 1:代码 #
|
|
思路 1:复杂度分析 #
- 时间复杂度:$O(min(m, n) \times (\log_2 m + \log_2 n))$,其中 $m$ 是矩阵的行数,$n$ 是矩阵的列数。
- 空间复杂度:$O(1)$。