牛客——剑指offer系列题解:二维数组中的查找(python,双指针法)

从今天开始希望能记录刷题的过程。牛客和力扣中都有相关题目,这里以牛客的题目描述为主。该系列默认采用python语言。
问题描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
所用数据结构:数组
题解:
方法一:暴力法

class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        
        #时间复杂度O(mn)->O(n ^ 2)
        for i in range(len(array)):#行
            for j in range(len(array[i])):#列
                if target == array[i][j]:#若找到,返回True
                    return True
        return False
        

复杂度分析:时间复杂度O(n^2)
方法二:双指针法
维护两个指针,小指针i(表示行号)和大指针j(表示列号),(趋势是从右上到左下)并不断缩小所查找的范围。

class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
  #时间复杂度O(m + n)-> O(n)
        row_count = len(array)
        if row_count == 0 or len(array[0]) == 0:
        	return False
        col_count = len(array[0])
        i = 0
        j = col_count -1
        while i < row_count and j >= 0:
            value = array[i][j]
            if target == value:#如果找到,返回
                return True
            elif target < value:#如果目标较小,则把大指针j减小,在小于j的列号里查找
                j -= 1
            else:		#如果目标较大,则把小指针i增大,在大于i的行里查找
                i += 1
        return False

复杂度分析:时间复杂度O(n)

发布了61 篇原创文章 · 获赞 10 · 访问量 2918

猜你喜欢

转载自blog.csdn.net/weixin_42042056/article/details/105508100