# C# solution with O(n) time complexity and O(1) additional space complexity

Working on a puzzle.

Given an array a that contains only numbers in the range from 1 to a.length, find the first duplicate number for which the second occurrence has the minimal index. In other words, if there are more than 1 duplicated numbers, return the number for which the second occurrence has a smaller index than the second occurrence of the other number does. If there are no such elements, return -1.

Below are some sample array's which are being tested.  So, in the code I have when this array  { 2, 4, 3, 5, 1 } reaches 5 I get an out of bound error which makes sense.  Any idea how to solve?
``````        private void Form1_Load(object sender, EventArgs e)
{
int[] a = new int[]{2, 3, 3, 1, 5, 2};
a = new int[] { 2, 4, 3, 5, 1 };
a = new int[] {1};

//Console.Write("The first repeating elements is: ");

Console.Write("Repeated Elements are :");
//for (int i = 0; i < a.Length; i++)
//{
//    for (int j = i + 1; j < a.Length; j++)
//    {
//        if (a[i] == a[j])
//            Console.Write(a[i] + " ");
//    }
//}

for (int i = 0; i < a.Length; i++)
{
if (a[Math.Abs(a[i])] >= 0)
{
a[Math.Abs(a[i])] = -a[Math.Abs(a[i])];
//Console.WriteLine("IF: " + a[Math.Abs(a[i])]);
}
else
{
Console.Write(Math.Abs(a[i]) + " ");
break;
}
}
}
``````
.NET ProgrammingC#

Last Comment
CipherIS

8/22/2022 - Mon
Misha

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
CipherIS

Yes, I figured that out.  Question is how to resolve the issue.  The variable "a" is assigned 3 diff times because I have 3 diff test cases.

Any ideas how to resolve?
Misha

Do you try code from my comment?
CipherIS