Open In App

Find duplicates in O(n) time and O(n) extra space

Last Updated : 23 Jul, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

Given an array arr[] of n elements that contains elements from 0 to n-1, with any of these numbers appearing any number of times. The task is to find the repeating numbers.

Note: The repeating element should be printed only once.

Example: 

Input: n = 7, arr[] = [1, 2, 3, 6, 3, 6, 1]
Output: 1, 3, 6
Explanation: The numbers 1 , 3 and 6 appears more than once in the array.

Input : n = 5, arr[] = [1, 2, 3, 4 ,3]
Output: 3
Explanation: The number 3 appears more than once in the array.

This problem is an extended version of the following problem Find the two repeating elements in a given array.

Using hashmap - O(n) Time and O(n) Space

To find duplicates in an array, start by creating an empty hashmap to track the frequency of each element. Iterate through the array, updating the frequency count for each element in the hashmap. Then, iterate through the hashmap and add any element with a frequency greater than 1 to the result. If no duplicates are found add -1 to the result. Finally, return the result containing either the duplicate elements or -1 if no duplicates were found.

C++
// C++ code to find duplicates in an array
// using hashmap

#include <bits/stdc++.h>
using namespace std;

vector<int> findDuplicates(vector<int> &arr) {

    // Step 1: Create an empty unordered map to store
    // element frequencies
    int n = arr.size();
    unordered_map<int, int> freqMap;
    vector<int> result;

    // Step 2: Iterate through the array and count
    // element frequencies
    for (int i = 0; i < n; i++) {
        freqMap[arr[i]]++;
    }

    // Step 3: Iterate through the hashmap to find duplicates
    for (auto &entry : freqMap) {
        if (entry.second > 1) {
            result.push_back(entry.first);
        }
    }

    // Step 4: If no duplicates found, add -1 to the result
    if (result.empty()) {
        result.push_back(-1);
    }

    // Step 6: Return the result vector containing
    // duplicate elements or -1
    return result;
}

int main() {
    vector<int> arr = {1, 6, 5, 2, 3, 3, 2};

    vector<int> duplicates = findDuplicates(arr);

    for (int element : duplicates) {
        cout << element << " ";
    }

    return 0;
}
Java
// Java code to find duplicates in an array
// using hashmap

import java.util.*;

class GfG {

    static List<Integer> findDuplicates(Integer[] arr) {

        // Step 1: Create an empty hashmap to store
        // element frequencies
        int n = arr.length;
        Map<Integer, Integer> freqMap = new HashMap<>();
        List<Integer> result = new ArrayList<>();

        // Step 2: Iterate through the array and
        // count element frequencies
        for (int i = 0; i < n; i++) {
            freqMap.put(arr[i],
                        freqMap.getOrDefault(arr[i], 0)
                            + 1);
        }

        // Step 3: Iterate through the hashmap to find
        // duplicates
        for (Map.Entry<Integer, Integer> entry :
             freqMap.entrySet()) {
            if (entry.getValue() > 1) {
                result.add(entry.getKey());
            }
        }

        // Step 4: If no duplicates found, add -1 to the
        // result
        if (result.isEmpty()) {
            result.add(-1);
        }

        // Step 6: Return the result list containing
        // duplicate elements or -1
        return result;
    }

    public static void main(String[] args) {

        Integer[] arr = { 1, 6, 5, 2, 3, 3, 2 };
        List<Integer> duplicates = findDuplicates(arr);

        for (int element : duplicates) {
            System.out.print(element + " ");
        }
    }
}
Python
# Python code to find duplicates in an array
# using hashmap

def findDuplicates(arr):
  
    # Step 1: Create an empty dictionary
    # to store element frequencies
    freqMap = {}
    result = []

    # Step 2: Iterate through the array and
    # count element frequencies
    for num in arr:
        freqMap[num] = freqMap.get(num, 0) + 1

    # Step 3: Iterate through the dictionary to
    # find duplicates
    for key, value in freqMap.items():
        if value > 1:
            result.append(key)

    # Step 4: If no duplicates found, add -1 to the result
    if not result:
        result.append(-1)

    # Step 6: Return the result list containing
    # duplicate elements or -1
    return result


if __name__ == "__main__":
    arr = [1, 6, 5, 2, 3, 3, 2]
    duplicates = findDuplicates(arr)

    for element in duplicates:
        print(element, end=" ")
C#
// C# code to find duplicates in an array
// using hashmap

using System;
using System.Collections.Generic;

class GfG {

    static List<int> findDuplicates(int[] arr) {

        // Step 1: Create an empty dictionary to
        // store element frequencies
        int n = arr.Length;
        Dictionary<int, int> freqMap
            = new Dictionary<int, int>();
        List<int> result = new List<int>();

        // Step 2: Iterate through the array and
        // count element frequencies
        for (int i = 0; i < n; i++) {
            if (freqMap.ContainsKey(arr[i])) {
                freqMap[arr[i]]++;
            }
            else {
                freqMap[arr[i]] = 1;
            }
        }

        // Step 3: Iterate through the dictionary
        // to find duplicates
        foreach(var entry in freqMap) {
            if (entry.Value > 1) {
                result.Add(entry.Key);
            }
        }

        // Step 4: If no duplicates found, add -1 to the
        // result
        if (result.Count == 0) {
            result.Add(-1);
        }

        // Step 6: Return the result list containing
        // duplicate elements or -1
        return result;
    }

    static void Main(string[] args) {
        int[] arr = new int[] { 1, 6, 5, 2, 3, 3, 2 };
        List<int> duplicates = findDuplicates(arr);

        foreach(int element in duplicates) {
            Console.Write(element + " ");
        }
    }
}
JavaScript
// JavaScript code to find duplicates in an array
// using hashmap

function findDuplicates(arr) {

    // Step 1: Create an empty object to store 
    // element frequencies
    const freqMap = {};
    const result = [];

    // Step 2: Iterate through the array and 
    // count element frequencies
    for (let num of arr) {
        freqMap[num] = (freqMap[num] || 0) + 1;
    }

    // Step 3: Iterate through the object to find duplicates
    for (let key in freqMap) {
        if (freqMap[key] > 1) {
            result.push(parseInt(key));
        }
    }

    // Step 4: If no duplicates found, add -1 to the result
    if (result.length === 0) {
        result.push(-1);
    }

    // Step 6: Return the result array containing 
    // duplicate elements or -1
    return result;
}

// Driver code
const arr = [1, 6, 5, 2, 3, 3, 2];
const duplicates = findDuplicates(arr);

console.log(duplicates.join(' '));

Output
3 2 

Using Auxiliary Array - O(n) Time and O(n) Space

Since the numbers inside the array range from 0 to n-1 (inclusive), where n is the length of the array, we can utilize an auxiliary array of size n to record the frequency of each element. By iterating through we can found the duplicates easily.

C++
// C++ code to find duplicates in an array
// using auxilary array

#include <bits/stdc++.h>
using namespace std;

vector<int> findDuplicates(vector<int> &arr) {

    int n = arr.size();
    vector<int> freqArr(n);
    vector<int> result;

    // Step 2: Iterate through the array and count
    // element frequencies
    for (int i = 0; i < n; i++) {
        freqArr[arr[i]]++;
    }

    // Step 3: Iterate through all the possible elements to check
    // duplicates
    for (int i = 0; i < n; i++) {
        if (freqArr[i] > 1) {
            result.push_back(i);
        }
    }

    // Step 4: If no duplicates found, add -1 to the result
    if (result.empty()) {
        result.push_back(-1);
    }

    // Step 6: Return the result vector containing
    // duplicate elements or -1
    return result;
}

int main() {
    vector<int> arr = {1, 6, 5, 2, 3, 3, 2};

    vector<int> duplicates = findDuplicates(arr);

    for (int element : duplicates) {
        cout << element << " ";
    }

    return 0;
}
Java
// Java code to find duplicates in an array
// using auxiliary array

import java.util.*;

class GfG {

    static int[] findDuplicates(int[] arr) {

        int n = arr.length;
        int[] freqArr = new int[n]; 
        List<Integer> result = new ArrayList<>();

        // Step 2: Iterate through the array
        // and count element frequencies
        for (int i = 0; i < n; i++) {
            freqArr[arr[i]]++;
        }

        // Step 3: Iterate through all the possible
        // elements to check duplicates
        for (int i = 0; i < n; i++) {
            if (freqArr[arr[i]] > 1) {
                result.add(arr[i]);
                freqArr[arr[i]]
                    = 0; // To avoid adding duplicates again
            }
        }

        // Step 4: If no duplicates found, add -1 to the
        // result
        if (result.isEmpty()) {
            result.add(-1);
        }

        // Convert the result list to an array and return
        return result.stream().mapToInt(i -> i).toArray();
    }

    public static void main(String[] args) {

        int[] arr = { 1, 6, 5, 2, 3, 3, 2 };
        int[] duplicates = findDuplicates(arr);

        for (int element : duplicates) {
            System.out.print(element + " ");
        }
    }
}
Python
# Python code to find duplicates in an array
# using auxiliary array


def findDuplicates(arr):
    n = len(arr)
    freqArr = [0] * n
    result = []

    # Step 2: Iterate through the array and
    # count element frequencies
    for num in arr:
        freqArr[num] += 1

    # Step 3: Iterate through all the possible
    # elements to check duplicates
    for i in range(n):
        if freqArr[i] > 1:
            result.append(i)

    # Step 4: If no duplicates found,
    # add -1 to the result
    if not result:
        result.append(-1)

    # Step 6: Return the result list containing 
    # duplicate elements or -1
    return result


if __name__ == "__main__":
    arr = [1, 6, 5, 2, 3, 3, 2]
    duplicates = findDuplicates(arr)

    for element in duplicates:
        print(element, end=" ")
C#
// C# code to find duplicates in an array
// using auxiliary array

using System;
using System.Collections.Generic;

class GfG {

    static int[] findDuplicates(int[] arr) {

        int n = arr.Length;
        int[] freqArr = new int[n];
        List<int> result = new List<int>();

        // Step 2: Iterate through the array and count
        // element frequencies
        for (int i = 0; i < n; i++) {
            freqArr[arr[i]]++;
        }

        // Step 3: Iterate through all the possible elements
        // to check duplicates
        for (int i = 0; i < n; i++) {
            if (freqArr[arr[i]] > 1) {
                result.Add(arr[i]);
                freqArr[arr[i]]
                    = 0;
            }
        }

        // Step 4: If no duplicates found, add -1 to the
        // result
        if (result.Count == 0) {
            result.Add(-1);
        }

        // Step 6: Return the result list containing
        // duplicate elements or -1
        return result.ToArray();
    }

    static void Main(string[] args) {

        int[] arr = { 1, 6, 5, 2, 3, 3, 2 };
        int[] duplicates = findDuplicates(arr);

        foreach(int element in duplicates) {
            Console.Write(element + " ");
        }
    }
}
JavaScript
// JavaScript code to find duplicates in an array
// using auxiliary array

function findDuplicates(arr) {

    const n = arr.length;
    const freqArr = new Array(n).fill(0);
    const result = [];

    // Step 2: Iterate through the array and count element
    // frequencies
    for (const num of arr) {
        freqArr[num]++;
    }

    // Step 3: Iterate through all the possible elements to
    // check duplicates
    for (let i = 0; i < n; i++) {
        if (freqArr[i] > 1) {
            result.push(i);
        }
    }

    // Step 4: If no duplicates found, add -1 to the result
    if (result.length === 0) {
        result.push(-1);
    }

    // Step 6: Return the result array containing duplicate
    // elements or -1
    return result;
}

// Driver code
const arr = [ 1, 6, 5, 2, 3, 3, 2 ];
const duplicates = findDuplicates(arr);
console.log(duplicates.join(" "));

Output
2 3 

All of the above approaches require extra space. Please refer to Duplicates in an array in O(n) and by using O(1) extra space.


Find duplicates in O(n) time and O(1) extra space
Article Tags :
Practice Tags :

Similar Reads