解题思路
数组是长下面这样的,从左到右递增,从上到下递增。
在遍历每一行的时候,如果遍历到一个元素大于target
,那么当前元素所在的列及之后的列都不用遍历了。
例如target=7
,遍历第一行元素,因为8>7
,所以可以不必考虑8所在的列及之后的列
。
把数组更新为array[1:,:2]
(如果是numpy的矩阵,是可以这样的),但是这里是列表,所以还是要用列表表达式来得到。
例如:
array = [[1,2,8,9], [2,4,9,12], [4,7,10,13], [6,8,11,15]]
part_of_array = [x[:2] for x in array[1:]]
print(part_of_array)
>>>
[[2, 4], [4, 7], [6, 8]]
[x[:2] for x in array[1:]]
取的是array
的[1:]
行,每行的[:2]
列
递归
class Solution:
# array 二维列表
def Find(self, target, array):
if len(array) == 0:
return False
for i, row in enumerate(array):
for j, item in enumerate(row):
if item == target:
return True
elif item > target:
array = [x[:j] for x in array[i + 1:]]
return self.Find(target, array)
这一步操作,是取二维数组的部分元素
array = [x[:j] for x in array[i + 1:]]
非递归
class Solution:
# array 二维列表
def Find(self, target, array):
m = len(array)
n = len(array[0]) - 1
i = 0
while i < m and n >= 0:
if target > array[i][n]:
i += 1
elif target < array[i][n]:
n -= 1
else:
return True
return False