初学Python,简单语法掌握之后,希望通过做题来加强语言的熟悉度。
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路
涉及到“查找”,尤其是有序的数列中查找,第一个想法是“二分查找”。二分查找,第一步是找到“二分”的位置,即“中位数”。 但是分析题目,容易知道,在有序的二维数组里,“中位数”的位置不是固定的。无法简单的直接使用二分查找方法。
思路一:是强行使用基本的“二分查找”方法,取二维数组元素总数的1/2计算出“中位数”的行数和列数,作为第一次二分位置,类推。
思路二:分析题目,从二维数组中的某个元素出发,存在2个、3个、4个路径的情况(2个、3个、4个相邻元素),矩形四个角的元素为两个路径情况,其中左上和右下,其相邻元素都比本身元素大(小),无法区别开来下一步的路径,则适用的两个元素为左下角元素和右上角元素。根据元素与待查找目标的大小关系,选择两个路径之一,进行下一步查找。
代码(以右上角为起始点):
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
row = len(array) - 1
col = len(array[0]) - 1
i = 0
j = col
while i <= row and j >= 0:
if target > array[i][j]:
i +=1
elif target < array[i][j]:
j -= 1
else:
return True
return False