[算法] - 二维数组数据查找

描述:

给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。要求时间复杂度 O(M + N),空间复杂度 O(1)。

思路:

考虑到时间复杂度,对角线比较大小进行查找。

解答:

def metrix_query():
    target = 18
    data = [
        [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]
    ]
    row, col = 5, 5
    r, c = 0, col-1
    while r < row and c >= 0:
        if data[r][c] == target:
            return True, r, c
        elif data[r][c] < target:
            r += 1
        else:
            c -= 1
    return False, None, None

print metrix_query()

你可能感兴趣的:([算法] - 二维数组数据查找)