Related Articles

# Find duplicates in constant array with elements 0 to N-1 in O(1) space

• Difficulty Level : Hard
• Last Updated : 31 Aug, 2021

Given a constant array of n elements which contains elements from 1 to n-1, with any of these numbers appearing any number of times. Find any one of these repeating numbers in O(n) and using only constant memory space.
Examples:

```Input : arr[] = {1, 2, 3, 4, 5, 6, 3}
Output : 3```

As the given array is constant methods given in below articles will not work.

1. We are taking two variable i & j starting from 0
2. We will run loop until i reached last elem or found repeated elem
3. We will pre-increment the j value so that we can compare elem with next elem
4. If we don’t find elem, we will increase i as j will be pointing last elem and then reposition j with i

## Java

 `// Java program to find a duplicate``// element in an array with values in``// range from 0 to n-1.``import` `java.io.*;``import` `java.util.*;` `public` `class` `GFG {``    ` `    ``// function to find one duplicate``    ``static` `int` `findduplicate(``int` `[]a, ``int` `n)``    ``{``        ` `        ``int` `i=``0``,j=``0``;``        ``while``(i

## Java

 `// Java program to find a duplicate``// element in an array with values in``// range from 0 to n-1.``import` `java.io.*;``import` `java.util.*;` `public` `class` `GFG {``     ` `    ``// function to find one duplicate``    ``static` `int` `findduplicate(``int` `[]arr, ``int` `n)``    ``{``         ` `        ``// return -1 because in these cases``        ``// there can not be any repeated element``        ``if` `(n <= ``1``)``            ``return` `-``1``;``     ` `        ``// initialize fast and slow``        ``int` `slow = arr[``0``];``        ``int` `fast = arr[arr[``0``]];``     ` `        ``// loop to enter in the cycle``        ``while` `(fast != slow)``        ``{``     ` `            ``// move one step for slow``            ``slow = arr[slow];``     ` `            ``// move two step for fast``            ``fast = arr[arr[fast]];``        ``}``     ` `        ``// loop to find entry``        ``// point of the cycle``        ``fast = ``0``;``        ``while` `(slow != fast)``        ``{``            ``slow = arr[slow];``            ``fast = arr[fast];``        ``}``        ``return` `slow;``    ``}``     ` `    ``// Driver Code``    ``public` `static` `void` `main(String args[])``    ``{``        ``int` `[]arr = {``1``, ``2``, ``3``, ``4``, ``5``, ``6``, ``3``};``        ``int` `n = arr.length;``        ``System.out.print(findduplicate(arr, n));``    ``}``}`` ` `// This code is contributed by``// Manish Shaw (manishshaw1)`

## Python 3

 `# Python 3 program to find a duplicate``# element in an array with values in``# range from 0 to n-1.` `# function to find one duplicate``def` `findduplicate(arr, n):` `    ``# return -1 because in these cases``    ``# there can not be any repeated element``    ``if` `(n <``=` `1``):``        ``return` `-``1` `    ``# initialize fast and slow``    ``slow ``=` `arr[``0``]``    ``fast ``=` `arr[arr[``0``]]` `    ``# loop to enter in the cycle``    ``while` `(fast !``=` `slow) :` `        ``# move one step for slow``        ``slow ``=` `arr[slow]` `        ``# move two step for fast``        ``fast ``=` `arr[arr[fast]]` `    ``# loop to find entry point of the cycle``    ``fast ``=` `0``    ``while` `(slow !``=` `fast):``        ``slow ``=` `arr[slow]``        ``fast ``=` `arr[fast]``    ``return` `slow` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:``    ` `    ``arr ``=` `[``1``, ``2``, ``3``, ``4``, ``5``, ``6``, ``3` `]``    ``n ``=` `len``(arr)``    ``print``(findduplicate(arr, n))` `# This code is contributed by ita_c`

## C#

 `// C# program to find a duplicate``// element in an array with values in``// range from 0 to n-1.``using` `System;``using` `System.Collections.Generic;``class` `GFG {``    ` `    ``// function to find one duplicate``    ``static` `int` `findduplicate(``int` `[]arr, ``int` `n)``    ``{``        ` `        ``// return -1 because in these cases``        ``// there can not be any repeated element``        ``if` `(n <= 1)``            ``return` `-1;``    ` `        ``// initialize fast and slow``        ``int` `slow = arr;``        ``int` `fast = arr[arr];``    ` `        ``// loop to enter in the cycle``        ``while` `(fast != slow)``        ``{``    ` `            ``// move one step for slow``            ``slow = arr[slow];``    ` `            ``// move two step for fast``            ``fast = arr[arr[fast]];``        ``}``    ` `        ``// loop to find entry``        ``// point of the cycle``        ``fast = 0;``        ``while` `(slow != fast)``        ``{``            ``slow = arr[slow];``            ``fast = arr[fast];``        ``}``        ``return` `slow;``    ``}``    ` `    ``// Driver Code``    ``public` `static` `void` `Main()``    ``{``        ``int` `[]arr = {1, 2, 3, 4, 5, 6, 3};``        ``int` `n = arr.Length;``        ``Console.Write(findduplicate(arr, n));``    ``}``}` `// This code is contributed by``// Manish Shaw (manishshaw1)`

## PHP

 ``

## Javascript

 ``

Output:

`3`

Time Complexity : O(n)
Auxiliary Space : O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up