二维数组中的查找
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路
思路一
- 注意本体给的数组是部分有序的:二维数组的每行、每列是递增排序的,但是不同行不同列的两个元素没有必然的大小关系。
- 根据上面这个特性,我们可以选取数组中右上角的数字进行比较。如果该数字等于target,则查找结束;如果该数字小于target,说明target在该数字所在行的下面行;如果该数字大于target,说明target在该数字所在列的左边。这样每次查找都可以剔除一行或者一列直到找到target。
- 时间复杂度O(max(M,N))
- 注意:我们同样也可以选取左下角的元素作为对比标准,但是不能选择左上角或者右下角。
python实现代码
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
if not array:
return False
row = len(array)
col = len(array[0]) if row else 0
m, n = 0, col-1
while m < row and n >= 0:
if array[m][n] > target:
n -= 1
elif array[m][n] < target:
m += 1
else:
return True
return False