Related Articles
Find duplicate in an array in O(n) and by using O(1) extra space
• Difficulty Level : Medium
• Last Updated : 18 Mar, 2021

Given an array arr[] containing n + 1 integers where each integer is between 1 and n (inclusive). There is only one duplicate element, find the duplicate element in O(n) time complexity and O(1) space.
Examples :

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

Input  : arr[] = {1, 3, 2, 1}
Output : 1

Approach :
Firstly, the constraints of this problem imply that a cycle must exist. Because each number in an array arr[] is between 1 and n, it will necessarily point to an index that exists. Therefore, the list can be traversed infinitely, which implies that there is a cycle. Additionally, because 0 cannot appear as a value in an array arr[], arr[0] cannot be part of the cycle. Therefore, traversing the array in this manner from arr[0] is equivalent to traversing a cyclic linked list. The problem can be solved just like linked list cycle.
Below is the implementation of above approach:

## C++

 // CPP code to find the repeated elements// in the array where every other is present once#include using namespace std; // Function to find duplicateint findDuplicate(int arr[]){    // Find the intersection point of    // the slow and fast.    int slow = arr[0];    int fast = arr[0];    do    {        slow = arr[slow];        fast = arr[arr[fast]];    } while (slow != fast);     // Find the "entrance" to the cycle.    int ptr1 = arr[0];    int ptr2 = slow;    while (ptr1 != ptr2)    {        ptr1 = arr[ptr1];        ptr2 = arr[ptr2];    }     return ptr1;} // Driver codeint main(){    int arr[] = { 1, 3, 2, 1 };         cout << findDuplicate(arr) << endl;         return 0;}

## Java

 // Java code to find the repeated// elements in the array where// every other is present onceimport java.util.*; class GFG{ // Function to find duplicatepublic static int findDuplicate(int []arr){    // Find the intersection    // point of the slow and fast.    int slow = arr[0];    int fast = arr[0];    do    {        slow = arr[slow];        fast = arr[arr[fast]];    } while (slow != fast);     // Find the "entrance"    // to the cycle.    int ptr1 = arr[0];    int ptr2 = slow;    while (ptr1 != ptr2)    {        ptr1 = arr[ptr1];        ptr2 = arr[ptr2];    }     return ptr1;} // Driver Codepublic static void main(String[] args){    int []arr = {1, 3, 2, 1};     System.out.println("" +               findDuplicate(arr));     System.exit(0);}} // This code is contributed// by Harshit Saini

## Python3

 # Python code to find the# repeated elements in the# array where every other# is present once # Function to find duplicatedef findDuplicate(arr):     # Find the intersection    # point of the slow and fast.    slow = arr[0]    fast = arr[0]    while True:        slow = arr[slow]        fast = arr[arr[fast]]        if slow == fast:            break     # Find the "entrance"    # to the cycle.    ptr1 = arr[0]    ptr2 = slow    while ptr1 != ptr2:        ptr1 = arr[ptr1]        ptr2 = arr[ptr2]             return ptr1     # Driver codeif __name__ == '__main__':              arr = [ 1, 3, 2, 1 ]     print(findDuplicate(arr))  # This code is contributed# by Harshit Saini

## C#

 // C# code to find the repeated// elements in the array where// every other is present onceusing System; class GFG{ // Function to find duplicatepublic static int findDuplicate(int []arr){    // Find the intersection    // point of the slow and fast.    int slow = arr[0];    int fast = arr[0];    do    {        slow = arr[slow];        fast = arr[arr[fast]];    } while (slow != fast);     // Find the "entrance"    // to the cycle.    int ptr1 = arr[0];    int ptr2 = slow;    while (ptr1 != ptr2)    {        ptr1 = arr[ptr1];        ptr2 = arr[ptr2];    }     return ptr1;} // Driver Codepublic static void Main(){    int[] arr = {1, 3, 2, 1};     Console.WriteLine("" +            findDuplicate(arr)); }} // This code is contributed// by Akanksha Rai(Abby_akku)



## Javascript


Output:
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 industry experts, please refer Geeks Classes Live

My Personal Notes arrow_drop_up