每天一算法题 之 《剑指offer》 -- 二维数组中的查找

版权声明:我是小仙女 转载要告诉小仙女哦 https://blog.csdn.net/qq_40210472/article/details/88651444

题目描述

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

首先:遇到查找题,我们是想先遍历所有的值,来确定target是否在array 中,问题就转换成了二维列表的遍历。

我使用了简单粗暴的两层for 循环来进行遍历,利用列表句柄的算法

# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        
        #print(n)
        for i in array:
            for j in i:
                if j == target: 
                    return True
        return False

以上是正确的结果,但是我也是踩了坑,比如我试图去使用range 循环遍历所有的数字,但是我忽略了在python列表中每一个列表的长度可以是不一样的,所以用range时容易出现 以下 error:

list out of range

上面的算法简单而且能通过测试,但是复杂度还是很大

我们要需要再考虑到其中提到的顺序大小问题,左边比右边小

上边比下面的小,所以可以考虑从右顶点作为第一个点

# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        
        rows = len(array)
        cols = len(array[0])
        
        i = rows
        j = 0
        
        while i>=0 and j<=cols:
            if target<array[i][j]:
                i-=1
            elif target>array[i][j]:
                j+=1
            else:
                return true
        return false

猜你喜欢

转载自blog.csdn.net/qq_40210472/article/details/88651444
今日推荐