MCO:
Así que me encontré con este problema en Java que quiere eliminar una lista del número que se ha producido más de dos veces, pero manteniendo el orden, y las dos primeras apariciones.
Por ejemplo, si la lista es 2, 3, 5, 4, 5, 2, 4, 3, 5, 2, 4, 4, 2, 10
la salida esperada sería de 2, 3, 5, 4, 5, 2, 4, 3, 10
He intentado varios métodos, incluyendo el uso de un contador int para realizar un seguimiento de las ocurrencias y filtrar hacia fuera, pero no estoy seguro de cómo me puedo ir sobre ella
class DeDup {
// function to find the element occurring more than 3 times
static void get2Occurrences(int arr[]) {
int i;
int count = 0;
for (i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (arr[i] == arr[j])
count++;
}
if (count < 3 && count > 0) {
//return arr[i];
System.out.print(arr[i] + ", ");
} else {
for (int k = 2; k > 0; k--) {
System.out.print(arr[i] + ", ");
}
}
}
}
// driver code
public static void main(String[]args) {
int arr[] = new int[]{ 2, 3, 5, 4, 5, 2, 4, 3, 5, 2, 4, 4, 2, 10 };
//expected output: 2, 3, 5, 4, 5, 2, 4, 3, 10
//int n = arr.length;
get2Occurrences(arr);
}
}
la salida esperada sería de 2, 3, 5, 4, 5, 2, 4, 3, 10
pero tengo 2, 2, 3, 3, 5, 5, 4, 4, 5, 5, 2, 2, 4, 4, 3, 3, 5, 5, 2, 2, 4, 4, 4, 4 , 2, 2, 10, 10,
Ilya:
En esta solución, puede cambiar el número de repeticiones de tres a otra.
int[] arr = new int[]{2, 3, 5, 4, 5, 2, 4, 3, 5, 2, 4, 4, 2, 10};
Map<Integer, Integer> counting = new HashMap<>();
for (Integer current : arr) {
int count = counting.compute(current, (x, n) -> n == null ? 1 : n + 1);
if (count < 3) {
System.out.print(current + ", ");
}
}