A seguir, alguns métodos para introduzir o número de números de matriz Java. O conteúdo específico é o seguinte:
Método 1:
Classificação da matriz e, em seguida, o valor intermediário é definitivamente o valor a ser encontrado. Classifique a complexidade do tempo mínimo (classificação rápida) O (nLogn), além de travessia.
Método 2:
Usando um método da tabela de hash, ou seja, contando o número de ocorrências de cada matriz e os números de saída cujas ocorrências são maiores que o comprimento da matriz.
Método 3:
O número de ocorrências excede metade do comprimento da matriz, indicando que esse número aparece mais vezes que a soma de outros números.
Considere excluir dois números diferentes a cada vez, o número de ocorrências nos números restantes ainda excede o número total. Repita o processo constantemente, exclua outros números e, finalmente, encontre o número com mais da metade das ocorrências. A complexidade do tempo desse método é O (n) e a complexidade do espaço é O (1).
Para mudar a idéia, isso pode ser alcançado através da contagem, em vez de exclusão física real. Durante o processo de atravessar a matriz, salve dois valores, um é o número na matriz e o outro é o número de ocorrências. Ao percorrer o próximo número, se esse número for o mesmo que o número salvo anteriormente, o número de vezes é aumentado em 1 e, se for diferente, o número de vezes é diminuído em 1. Se o número de vezes for 0, economize o próximo número e o número é o número.
public int maisHalf (int [] nums) {int result = 0; int conting = 1; if (nums.Length == 0) retornar -1; resultado = nums [0]; para (int i = 1; i <nums.length; i ++) {if (count == 0) {resultado = nums [i] [i]; contagem; contagem 1; continua; se; resultado;}Método 4:
Classificação rápida melhorada, mencionada anteriormente, se uma matriz for classificada, o número na posição do meio deve ser o valor que você deseja. A complexidade do tempo de classificar as matrizes é O (nlog (n)), mas, para esta pergunta, existem algoritmos melhores que podem ser encontrados dentro da complexidade do tempo O (n).
Derivando do algoritmo de classificação rápida, o método partition () é o método mais importante. Este método retorna um índice, que pode garantir que o número na posição do índice seja classificado. O número à esquerda do índice é menor que o número em que o índice está localizado e o número à direita do índice é maior que o número em que o índice está localizado. Então essa pergunta pode ser resolvida usando essa ideia.
Índice de retorno via partition (). Se index == MID, significa que a mediana da matriz foi encontrada; Se indexmid, significa que a mediana está entre [Start, Index-1]. Eu sei que o final do índice == loop médio é obtido.
public int partition (int [] nums, int start, int end) {int pivotkey = nums [start]; int origem = start; while (start <end) {while (start <end && nums [end]> = pivotkey) end-; troca (nums, start, fim); troca (nums, origem, end); end end;} p int [] swap (int [] ints, int x, int y) {int temp = ints [x]; ints [x] = ints [y]; ints [y] = temp; retornar ints; } public int morethanhalf (int [] nums) {if (nums.Length == 0) retornar -1; int start = 0; int end = nums.Length-1; int index = partition (nums, start, end); int mid = nums.Length/2; While (Index! Partição (nums, start, índice-1); else {//, de outra forma, ajuste o índice de matriz do índice+1 na seção final = partição (nums, índice+1, end);}} retorna nums [index];}O conteúdo acima apresenta o conteúdo relevante do código Java que implementa números que aparecem mais da metade dos tempos em uma matriz. Espero que seja útil para todos!