剑指04-二维数组中的查找
题目:剑指 Offer 04. 二维数组中的查找(M)

解题思路1:暴力遍历
直接两个for循环,本来是想用二分的,但是常规二分没法确定后续的划分范围,直接暴力遍历
时间:\(O(MN)\)
空间:\(O(1)\)
class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
if not matrix or not matrix[0]: return False
for i in matrix:
for j in i:
if target == i: return True
return False
优质解答:改版二分查找(参考自K神)
利用数组从上到下和从左到右都为递增的特点,从数组右上角开始,每次缩小一行或者一列的范围,如果target大于该值,则可以直接向下移动一行,如果target小于该值,则可以向左移动一列,直到找到target或者遍历结束。
时间:\(O(M+N)\)
空间:\(O(1)\)
class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
i = 0
if len(matrix) == 0:
return False
j = len(matrix[0]) - 1
while i < len(matrix) and j >= 0:
if matrix[i][j] == target: return True
elif matrix[i][j] < target: i += 1
else: j -= 1
return False

浙公网安备 33010602011771号