LeetCode 240 [Search a 2D Matrix II]

原题

写出一个高效的算法来搜索m×n矩阵中的值,返回这个值是否出现。
这个矩阵具有以下特性:
每行中的整数从左到右是排序的。
每一列的整数从上到下是排序的。
在每一行或每一列中没有重复的整数。

考虑下列矩阵:

[
    [1, 3, 5, 7],
    [2, 4, 7, 8],
    [3, 5, 9, 10]
]

给出target = 3,返回 True

解题思路

  • 思考时间复杂度时,可以从有多少个答案的角度考虑,像permutation时间复杂度肯定是2n而不会是n2
  • [Search a 2D Matrix I]是每一行的最后一个都小于下一行的第一个,所以可以把整个二维数组看成递增的一维数组,而本题不同。
  • 把起始点设为左下角,如本题,如果target > 3则第一列跳过,如果target < 3则最后一行跳过

完整代码

class Solution(object):
    def searchMatrix(self, matrix, target):
        """
        :type matrix: List[List[int]]
        :type target: int
        :rtype: bool
        """
        if not matrix:
            return 0
            
        depth = len(matrix)
        width = len(matrix[0])
        row, col = depth - 1, 0
        while row >= 0 and col < width:
            if matrix[row][col] == target:
                return True
            elif matrix[row][col] > target:
                row -= 1
            else:
                col += 1
        return False
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容