行从左到右递增,列从上到下递增,找目标值

字节
讲思路在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,给定一个目标数,判断是否在矩阵中。

先看target是不是大于第一行最右边的(最大值),
大于然后对比往下一行的最大值,
小于就跟当前一列的值往左对比。。

二维数组是从左到右递增,从上到下递增,row为行数,col为列数,a[row-1][col-1]为最大数,如果剔除这一行,这一列,则最大数为a[row-2][col-2],如果要查找的num大于a[row-2][col-2]并且大于a[row-1][col-1],则在该row-1行和col-1列查找,照这样遍历。

def find(target, array):
    i = 0
    j = len(array[0]) - 1
    
    while i < len(array) and j >= 0:
        base = array[i][j]
        if target == base:
            return True
        elif target > base: 
            i += 1
        else:
            j -= 1
    return False


print(find(11212,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]))

你可能感兴趣的