【NewCoder】二维数组中的查找

题目描述

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

思路

1. 最简单的是直接遍历数组,找到对应的整数得到结果,但是耗时耗空间。

代码:

# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        for row in array:
            for col in row:
                if target == col:
                    return True
        return False

2. 因为数组是按大小排列的,可以从数组的左下角或者右上角开始遍历,我用的是左下角,如果 target 比遍历到的这个数大的话,我们就向右遍历,如果 target 比该数小的话,我们就向上遍历。这样可以轻松锁定 target 所在的行数,不需要把数组中所有数都遍历一遍。

代码:

# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        m = len(array)
        n = len(array[0])
        if n == 0 : # 如果二维数组为[[]],可以直接返回False
            return False
        for row in range(m-1,-1,-1): # range(m,n,-1),步长-1,逆序循环
            if target == array[row][0]:
                return True
            elif target > array[row][0]:
                for col in array[row]:
                    if target == col:
                        return True
        return False

总结

从提交返回的运行时间来看,第二种速度明显更快。

方法1:

方法2:

 

 方法2 写的时候感觉很简单,然而一开始总是不通过,因为有个例子是 array = [ [ ] ],这个数组的话其实还是个二维数组,但是len(array) 并不等于0,而是等于1 ,len(array[0]) 才等于0 。

你可能感兴趣的:(NewCoder)