给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。
Consider the following matrix:
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
Given target = 5, return true.
Given target = 20, return false.
解题思路
要求时间复杂度 O(M + N),空间复杂度 O(1)。其中 M 为行数,N 为 列数。
该二维数组中的一个数,小于它的数一定在其左边,大于它的数一定在其下边。因此,从右上角开始查找,就可以根据 target 和当前元素的大小关系来缩小查找区间,当前元素的查找区间为左下角的所有元素。
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
row = len(array)
col = len(array[0]) - 1 if row != 0 else 0
row2 = 0
# 索引合法就进入循环
while row2 < len(array) and col > -1:
print(array[row2][col])
if target < array[row2][col]:
col -= 1
elif target > array[row2][col]:
row2 += 1
else:
return True
return False
target, array = 7, [[1, 2, 8, 9], [2, 4, 9, 12],
[4, 7, 10, 13], [6, 8, 11, 15]]
# target, array = 5, [[1, 2, 8, 9], [2, 4, 9, 12],
# [4, 7, 10, 13], [6, 8, 11, 15]]
target, array = 7, []
target, array = 7, [[1]]
print(Solution().Find(target, array))