Definição do array:
// typedef struct arr_integer { // int size; // int *arr; // } arr_integer; // // arr_integer alloc_arr_integer(int len) { // arr_integer a = {len, len > 0 ? malloc(sizeof(int) * len) : NULL}; // return a; // }
Função:
int firstDuplicate(arr_integer a) {
int b[100001] = {0};
int hihi = -1;
for (int i=0; i<a.size; i++) {
if (b[a.arr[i]]) {
hihi = a.arr[i];
break;
}
b[a.arr[i]]++;
}
return hihi;
}
Problema:
Dado um array a que contém apenas números no intervalo de 1 a a.length, encontre o primeiro número duplicado para o qual a segunda ocorrência possui o índice mínimo. Em outras palavras, se houver mais de 1 número duplicado, retorne o número para o qual a segunda ocorrência possui um índice menor do que a segunda ocorrência do outro número. Se não houver tais elementos, retorne -1.
-
Para a = [2, 1, 3, 5, 3, 2], a saída deve ser firstDuplicate (a) = 3.
Existem 2 duplicatas: números 2 e 3. A segunda ocorrência de 3 tem um índice menor do que a segunda ocorrência de 2, portanto, a resposta é 3. -
Para a = [2, 4, 3, 5, 1], a saída deve ser firstDuplicate (a) = -1.
OBS: não fiz essa função, estava tentando resolver umas questões no code fight e alguem resolveu desse modo, mas eu não to conseguindo entender como a função funciona(principalmente o vetor dentro do vetor no if e tals).

