#include <stdio.h>
int find_duplicate(int arr[], int n) {
int freq[100] = {0}; // assuming max value < 100
for (int i = 0; i < n; i++) {
if (freq[arr[i]] == 1)
return arr[i]; // found duplicate
freq[arr[i]]++;
}
return -1; // no duplicate found
}
int main() {
int n;
scanf("%d", &n);
int arr[100];
for (int i = 0; i < n; i++) scanf("%d", &arr[i]);
int result = find_duplicate(arr, n);
printf("%d\n", result);
return 0;
}
Here’s a clean algorithm-style breakdown to find a repeated element in an array of size n
, where elements are in the range [0, n-1]
and exactly one number is repeated once:
Input: Array arr[]
of size n
Output: The repeated number
Let slow = arr[0]
Let fast = arr[0]
Repeat:
slow = arr[slow]
fast = arr[arr[fast]]
Until slow == fast
Set slow = arr[0]
Repeat:
slow = arr[slow]
fast = arr[fast]
Until slow == fast
Return slow as the duplicate
Input
5 0 1 2 3 2
Expected Output
2