leetcode刷题自记录——剑指offer04. 二维数组中的查找

219 阅读1分钟

题目

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

题解

class Solution:
    def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
        if not matrix:
            return False

        n = len(matrix)
        m = len(matrix[0])

        if m == 0 or n == 0:
            return False
        i = n-1
        while i>=0:
            for j in range(m):
                if matrix[i][j] == target:
                    return True
                if matrix[i][j]>target:
                    i-=1
                    break
                if j==m-1:
                    return False
        return False

思路

类似于排序二叉树,数组元素的右下都是大于它的数,左上都是小于它的数,因此从数组的左下角开始遍历,若target小于该元素则向上一层,若target大于该元素则向右移动,找到则返回True,循环结束还未找到返回False。