《剑指offer》4.二维数组中的查找

2019-07-16  本文已影响0人  Houtasu
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。
1  2  8  9
2  4  9  12
4  7  10 13
6  8  11 15 

这到题的数组是有序排列,那么直接按照它排列的顺序来过滤到不合适的部分就行了。
比如查找7的时候,在和第一列的数字9比较,9比它大,由于数组是从上到下递增,那么9下面的肯定都比7大。如果是查找10,在和9比较的时候,它比9大,那么9左边的都不可能是10。
通过这种方法可以减少比较的次数。
python代码如下:

def find_number(n, nums):
    i, j = 0, len(nums[0]) - 1
    while i < len(nums) and j >= 0:
        if n == nums[i][j]:  # 如果相等则直接返回True
            return True
        else:
            if n > nums[i][j]:  # 如果n大了,则直接下移一行
                i += 1
            else:
                j -= 1  # 如果n小了,则左移一列
    return False
上一篇 下一篇

猜你喜欢

热点阅读