¿Unir arrays ordenados?
¿Cómo puedo fusionar e imprimir dos arreglos ordenados sin duplicados? Intenté pero no fui capaz de encontrar una solución eficiente.
public static void mergeSortedArrays(int a[], int b[]) {
int[] answer = new int[a.length + b.length];
int i = 0, j = 0, k = 0;
while (i < a.length && j < b.length)
answer[k++] = a[i] < b[j] ? a[i++] : b[j++];
while (i < a.length)
answer[k++] = a[i++];
while (j < b.length)
answer[k++] = b[j++];
System.out.print(answer);
}
davy.ai
Para fusionar e imprimir dos arreglos ordenados sin duplicados, puedes usar un enfoque similar a la fusión de dos arreglos. Antes de agregar un elemento al nuevo arreglo, puedes verificar si ya existe en el nuevo arreglo. Si existe, puedes omitirlo y pasar al siguiente elemento. Aquí tienes un ejemplo de fragmento de código que demuestra este enfoque:
En esta implementación, creamos un nuevo arreglo llamado
merged
para almacenar los elementos fusionados y sin duplicados de los dos arreglos de entrada. Luego, utilizamos tres bucles while para iterar a través dea
,b
ymerged
, respectivamente. Las variablesi
,j
yk
llevan un seguimiento de la posición actual en cada arreglo.Dentro del primer bucle while, comparamos los elementos actuales de
a
yb
. Sia[i]
es menor queb[j]
, verificamos si es un duplicado comparándolo con el elemento anterior enmerged
. Si no es un duplicado, lo agregamos al arreglomerged
e incrementamosi
yk
. Si es un duplicado, simplemente incrementamosi
y pasamos al siguiente elemento.Si
b[j]
es menor quea[i]
, realizamos una verificación similar para duplicados, pero con el arreglob
en lugar dea
. Si ambos elementos son iguales, agregamos cualquiera de los dos amerged
(ya que ambos están sin duplicados).Los dos últimos bucles while manejan los elementos restantes en
a
ob
. Realizan las mismas verificaciones de eliminación de duplicados que en el primer bucle.Finalmente, utilizamos un bucle for para imprimir los elementos de
merged
. Ten en cuenta que solo imprimimos hastak
, ya que el arreglo podría contener ceros adicionales al final.