#include <stdio.h> int find_duplicate(int arr[], int n) { int mxd=0; for(int i=0;i<n;i++){ mxd^=arr[i]^i; } int rlb=mxd & -mxd; int cand1=0,cand2=0; for(int i=0;i<n;i++){ arr[i] & rlb ? cand1^=arr[i] : cand2^=arr[i]; i & rlb ? cand1^=i : cand2^=i; } int cnt=0; for(int i=0;i<n;i++) if(cand1==arr[i]) cnt++; return cnt==2 ? cand1 : cand2; } 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", result); return 0; }
Test Cases
Test Results
Input
5 0 1 2 3 2
Expected Output
2