剑指offer面试题4:二维数组中的查找 Python解

二维数组中的查找

题目描述

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

解题思路

思路一


  • 注意本体给的数组是部分有序的:二维数组的每行、每列是递增排序的,但是不同行不同列的两个元素没有必然的大小关系。
  • 根据上面这个特性,我们可以选取数组中右上角的数字进行比较。如果该数字等于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

猜你喜欢

转载自blog.csdn.net/Kaiyuan_sjtu/article/details/87878769