描述
- 搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。
该矩阵具有以下特性:
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
思路
确定左右及上下限,削减矩阵,递归。
注意判断四个端点是否等于target,若有满足的返回true,否则判断左上角端点或右下角端点是否大于或小于target,满足则返回false,否则递归直到上下限溢出返回false。
可以证明,在以上判断条件下,每次递归都会导致矩阵被削减,时间复杂度为O(m+n)
复杂度
时间复杂度:
O(m+n)
空间复杂度:
O(1)
`class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
l = 0
r = len(matrix[0])-1
t = 0
b = len(matrix)-1
return self.dfs(matrix,l,r,t,b,target)
def dfs(self,matrix,l,r,t,b,target):print(l,r,t,b)if(r<l or b<t): return Falseif(matrix[t][l] == target or matrix[b][r] == target or matrix[t][r] == target or matrix[b][l] == target): return Trueif(matrix[t][l] > target): return Falseif(matrix[b][r] < target): return Falsen_r = rfor i in range(r-l+1):if(matrix[t][r-i] <= target):n_r = r-ibreakn_l = lfor i in range(r-l+1):if(matrix[b][l+i] >= target):n_l = l+ibreakn_b = bfor i in range(b-t+1):if(matrix[b-i][l] <= target):n_b = b-ibreakn_t = tfor i in range(b-t+1):if(matrix[t+i][r] >= target):n_t = t+ibreakreturn self.dfs(matrix,n_l,n_r,n_t,n_b,target)`