Jianzhi oferece notas de pincel - encontre uma matriz bidimensional

Escreva um título de catálogo personalizado aqui

A ideia é comparar o tamanho do alvo e o valor central da matriz. Se o alvo for grande, a matriz 1/4 no canto superior esquerdo do centro será excluída e, se o alvo for pequeno, a matriz 1/4 no canto inferior direito será excluída. Em seguida, divida a matriz 3/4 restante em três partes, chame recursivamente a função para encontrar as três matrizes.
código mostrado abaixo:

import numpy as np
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        print(array)
        array = np.array(array)
        if array.size == 0:
            return False
        col_r = array.shape[0]
        row_r = array.shape[1]
        col_m = int((col_r-1)/2)
        row_m = int((row_r-1)/2)
        anchor = array[col_m, row_m]
        if target < anchor:
            return self.Find(target, array[:col_m,:row_m]) or\
             self.Find(target, array[col_m:col_r,:row_m]) or\
              self.Find(target, array[:col_m,row_m:row_r])
        elif target > anchor:
            return self.Find(target, array[col_m+1:col_r,row_m+1:row_r]) or\
             self.Find(target, array[col_m+1:col_r,:row_m+1]) or\
              self.Find(target, array[:col_m+1,row_m+1:row_r])
        else:
            return True

No entanto, a velocidade do teste é muito baixa, porque é a complexidade do log (4/3, m n). Quando a matriz é maior que 4, a velocidade será mais lenta do que O (m + n). Portanto, use a pesquisa binária para pesquisar a partir do canto superior direito, o código é o seguinte:

class Solution(object):
    def findNumberIn2DArray(self, matrix, target):
        if len(matrix) == 0:
            return False
        r = len(matrix[0])-1
        t = 0
        max_c = len(matrix)
        while r >= 0 and t < max_c:
            anchor = matrix[t][r]
            if target == anchor:
                return True
            elif target > anchor:
                t+=1
            else:
                r-=1
        return False

Essa questão ainda é relativamente simples, ou seja, o código não é habilidoso o suficiente, preste atenção ao julgamento da matriz de entrada vazia

Acho que você gosta

Origin blog.csdn.net/baidu_37360677/article/details/108556287
Recomendado
Clasificación