Seja uma lista de números inteiros positivos sem nenhuma ordem específica e que possa conter duplicatas. Escreva um programa ou função que produza uma lista de números inteiros positivos M (cuja ordem não é importante), de modo que a combinação de L e M resulte na menor lista que pode ser totalmente dividida em intervalos idênticos de números inteiros [ 1 .. i ] , onde i é o maior elemento em L
Exemplo
Let L = [5,3,3,2,7]
. O elemento máximo de L
é 7
. A maioria das vezes que um número inteiro específico ocorre é 2
( 3
aparece 2 vezes). Portanto, precisamos gerar a lista M
que permitirá concluir L
para que possamos construir 2
intervalos de números inteiros de 1
até 7
.
Portanto, precisamos produzir M = [1,1,2,4,4,5,6,6,7]
, para que cada número inteiro de 1
a 7
apareça 2
vezes.
Entradas e saídas
- Use qualquer coisa no seu idioma que seja semelhante às listas. A estrutura de dados usada para a entrada e a saída deve ser a mesma.
- A lista de entrada conterá apenas números inteiros positivos.
- A lista de entrada não estará vazia.
- Você não pode assumir que a lista de entrada está classificada.
- A ordem na lista de saída não é importante.
Casos de teste
Input Output
[1] []
[7] [1, 2, 3, 4, 5, 6]
[1, 1, 1] []
[1, 8] [2, 3, 4, 5, 6, 7]
[3, 3, 3, 3] [1, 1, 1, 1, 2, 2, 2, 2]
[5, 2, 4, 5, 2] [1, 1, 3, 3, 4]
[5, 2, 4, 5, 5] [1, 1, 1, 2, 2, 3, 3, 3, 4, 4]
[5, 3, 3, 2, 7] [1, 1, 2, 4, 4, 5, 6, 6, 7]
Pontuação
Isso é código-golfe , então a resposta mais curta em bytes vence.
i
é o maior elemento de L
, foi um erro de digitação nas especificações.
M=[1,1,2,2,3]
por L=[3]
enquanto "mesclar L e M resulta em uma lista que pode ser totalmente dividida em intervalos idênticos de números inteiros [1..i]"?
[1,2]
. Vou esclarecer para que fique claro que deve resultar no número mínimo de intervalos.
i
o maior elemento deL
ouM
?