MCO:
Então me deparei com este problema em Java que quer remover uma lista de número que ocorreu mais de duas vezes, mas mantendo a ordem, e as duas primeiras ocorrências.
Por exemplo, se a lista é 2, 3, 5, 4, 5, 2, 4, 3, 5, 2, 4, 4, 2, 10
o resultado esperado iria ser 2, 3, 5, 4, 5, 2, 4, 3, 10
Eu tentei vários métodos, incluindo a utilização de um contador int para acompanhar as ocorrências e filtrá-la para fora, mas eu não sei como eu posso ir sobre ele
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);
}
}
o resultado esperado iria ser 2, 3, 5, 4, 5, 2, 4, 3, 10
mas i got 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:
Nesta solução, você pode alterar o número de repetições de três para outro.
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 + ", ");
}
}