牛客网《剑指offer》之Python2.7实现:二维数组中的查找

初学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

猜你喜欢

转载自blog.csdn.net/ck_101/article/details/82112736