剑指offer-二维数组查找

90 阅读1分钟

二维数组查找

img
target: 7

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

思路

从右上角(base)开始查找:base==target返回true

  • 如果base<target,指针下移

  • 如果base>target,指针左移

    也就是说如果target不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。

class Solution:
    def Find(self, target, array):  # array二维列表dist
        row = 0  # 第一行
        column = len(array[0]) - 1  # 第一行末尾,即右上角
        rows = len(array)  # len(array)只计算行数
        while row < rows and column >= 0:
            base = array[row][column]
            if target == base:
                return True
            elif target > base:
                row += 1
            else:
                column -= 1
        return False