(Java) leetcode-287 encontrar o número Duplicate

título Descrição

Encontrar o número de unidades repetidas []
Dado um número inteiro de n + nums compreendendo uma matriz, que é o número entre 1 a n (n-1 e que compreende a), pode ver-se a presença de, pelo menos, um número inteiro de repetição. Supondo que apenas um número inteiro único, encontrar o número de repetições.

Exemplo 1:

Entrada: [1,3,4,2,2]
Saída: 2
Exemplo 2:

Entrada: [3,1,3,4,2]
Output: 3
Descrição:

Você não pode mudar a matriz original (supondo que a matriz é somente leitura).
Só use espaço adicional O (1) é.
Ele é menos do que a complexidade de tempo de O (n2).
Apenas um conjunto duplicado de números, mas pode ser repetido mais de uma vez.

1 ideia: a dicotomia

Expressão por objecto, desde que o comprimento da matriz é N, então os elementos da matriz ∈ [1, n-1], e apenas um elemento de repetição. Uma ideia intuitiva, um conjunto de k∈ digital de [1, 1-n], os números de matriz estatísticos menos do que ou igual ao número de contagem k:

Se count <= k, descrita repetindo números devem estar na faixa de (k, n-1] é.
Se a contagem> k, descrita repetindo números constante dentro de [0, k] gama.
Usando essa natureza, usamos busca binária gradualmente repetir intervalo estreito, onde os números.

Primeiro teste da esquerda digital e fronteira direita à esquerda = 1, à direita = N- uma
ansa condição esquerda <direita:
meio = (esquerda + direita) // 2
o número de elementos de acordo com a natureza da matriz estatística de contagem média menor
se a contagem <= meio, DESCRIÇÃO repetiu os números devem estar no meio, certo intervalo (]. torna a esquerda = meio + 1
se a contagem> mid, descrito repetindo os números devem estar no, médio] faixa de esquerda [. faz o direito = meio.
Voltar deixou
análise de complexidade
de tempo complexidade: o (nlog (n)) , . executar o registo de dicotomia (n) transversal n, de modo a complexidade é o (nlog (n))
a complexidade do espaço: o (1)

Autor: zhu_shi_fu
link: https: //leetcode-cn.com/problems/find-the-duplicate-number/solution/er-fen-fa-kuai-man-zhi-zhen-zhu-xing-jie-shi-pytho /
fonte: botão estadia (LeetCode)
copyright reservados pelos autores. reimpressão comercial entre em contato com o autor autorizado, reimpressão não comercial por favor, indicar a fonte.

código

// 二分法
class Solution {
    public int findDuplicate(int[] nums) {
    	int left = 1;
    	int right = nums.length-1;
    	while(left < right) {
    		int count = 0;
            int mid = (left + right) / 2;
    		for(int num : nums) {
    			if (num <= mid) {
    				count++;
    			}
    		}

    		if (count <= mid) {
    			left = mid + 1;	
    		} else {
                right = mid;
            }
    	}
    	return left;
    }
}

Apresentar os resultados

Aqui Insert Picture Descrição

2 idéias: o ponteiro duplo

https://leetcode-cn.com/problems/linked-list-cycle-ii/solution/huan-xing-lian-biao-ii-by-leetcode/
diretamente na resposta oficial, similar leetcode-141, sobre a dificuldade de atualização , a lista de anel ligado se torna anel lógico.

Publicado 143 artigos originais · ganhou elogios 45 · vê 70000 +

Acho que você gosta

Origin blog.csdn.net/z714405489/article/details/103204497
Recomendado
Clasificación