数组中是递增行或递增列 的相关题目

数组中是递增行或递增列 的相关题目

前言

最近做了几道题,发现有一点相似之处,解法却又不相似,我整理成一起看看有什么化学反应

一、行列都是随机递增、查找某元素是否存在

题目描述

剑指offer04 二维数组中的查找

给定一个二维数组,行和列都是递增函数,然后给定一个整数,问该数组里面是否有该整数

[[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]] , target = 5

返回True

题目思路

这道题如果是按照传统的顺序来遍历的话,可以一列一列去遍历,然后每一列都二分,但是这样不够高效。

学到的一个方法就是从其他角度去遍历该数组:从右上角去开始遍历。

从右上角开始,那么对于每一个点,都有:左边比它小,下边比它大。

因此,可以根据该性质去遍历数组:如果要找的数比当前元素小,就往左边找,如果比它大,就往下面找。这样的寻找是有方向的,可以在O(m+n)的时间内完成。

代码实现

def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:        # O(m+n)        if len(matrix) == 0 or len(matrix[0]) == 0:            return False        n = len(matrix)        m = len(matrix[0])        i = 0        j = m - 1        while matrix[i][j] != target:            if matrix[i][j] < target:                i += 1            else:                j -= 1            if j < 0 or i > n - 1:                return False        return True

学到的坑

对于矩阵 [[ ]] 和 [ ],要特判它们不是写成

len(matrix[0]) is None 或者 len(matrix) is None

而应该是0。。。

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部