二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
1.遍历查找 利用二维数组由上到下,由左到右递增的规律,每次将二维数组矩阵的中最左下角的数字与要查找的数字比较。 从左下角来看,向上数字递减,向右数字递增。因此从左下角开始查找,当要查找数字比左下角数字大时,右移,去掉该列;要查找数字比左下角数字小时,上移,去掉该行。如此遍历查找。时间复杂度是m+n。 2.二分查找 利用递归性,采用分治策略。 把每一行看成有序递增的数组,利用二分查找,通过遍历每一行得到答案。时间复杂度是mlogn。
1.遍历查找
class Solution: def BooleanFind(self, target, array): rows = len(array) cols= len(array[0]) i = rows -1 j = 0 while j<=cols -1 and i>=0: if target<array[i][j]: i -= 1 elif target>array[i][j]: j += 1 else: return True return False2.二分查找
class Solution: def BinarySearch(self, target, array): rows = len(array) cols = len(array[0]) for i in range(rows): low = 0 high = cols - 1 while low <= high: mid = int((low+high)/2) if target > array[i][mid]: low = mid + 1 elif target < array[i][mid]: high = mid - 1 else: return True return False注意: 1.数组索引从0开始。 2.range函数从0开始生成迭代序列。