Unión e intersección de listas

Crea un método que reciba dos arreglos de enteros y devuelva un arreglo de intersección y un arreglo de unión.

  1. Arreglo de intersección: Elementos que ambos arreglos tienen en común.
  2. Arreglo de unión: Elementos que están en el primer arreglo, en el segundo o en ambos (no es una operación OR exclusiva).

Aunque los arreglos de entrada pueden contener números duplicados, los arreglos de intersección y unión devueltos deben estar convertidos en conjuntos; es decir, no deben contener duplicados. Los arreglos devueltos deben estar ordenados de forma ascendente.

int[] array1 = new int[]{5, 6, 6, 6, 8, 9};
int[] array2 = new int[]{3, 3, 4, 4, 5, 5, 8};

// Intersección: new int[]{5, 8}
// 5 y 8 son los únicos 2 números que están en ambos arreglos.

// Unión: new int[]{3, 4, 5, 6, 8, 9}
// Cada número está presente en al menos uno de los arreglos.

Ejemplos

Program.intersectionUnion(new int[]{1, 2, 3, 4, 4}, new int[]{4, 5, 9}) ➞ new int[][]{new int[]{4}, new int[]{1, 2, 3, 4, 5, 9}}

Program.intersectionUnion(new int[]{1, 2, 3}, new int[]{4, 5, 6}) ➞ new int[][]{new int[]{}, new int[]{1, 2, 3, 4, 5, 6}}

Program.intersectionUnion(new int[]{1, 1}, new int[]{1, 1, 1, 1}) ➞ new int[][]{new int[]{1}, new int[]{1}}

Notas

  • El orden de salida debe ser: primero la intersección y luego la unión.
  • Recuerda que ambos arreglos de salida deben estar en orden ascendente.
  • Cada arreglo de entrada tendrá al menos un elemento.
  • Si los dos arreglos son disjuntos (no tienen ningún elemento en común), devuelve un int[] vacío para la intersección.