Start learning free

LESSON 261 OF 410 · HASH TABLE

Remove Duplicates from Array III in O(n) Time Complexity using JavaScript

Practice O(n) Read the full explanation

Given an array of integers, return a new array containing only the unique values.

The resulting array can be in any order.

Example:

Input: [2, 3, 1, 1, 4, 3, -2, 1]
Output: [2, 3, 1, 4, -2]
			

Note:

Your algorithm should run in O(n) time and use O(n) extra space.


STEP 1 OF 2
    Ctrl + Enter to check

    JAVASCRIPT · HASH TABLE

    Remove Duplicates From Array in JavaScript, explained

    Problem Definition

    In this problem, you are given an array of integers and you need to return a new array that contains only the unique values from the original array. The order of the elements in the resulting array does not matter.

    Input:

    An array of integers.

    Output:

    A new array containing only the unique values from the input array.

    Constraints:

    • The algorithm should run in O(n) time complexity.
    • The algorithm should use O(n) extra space.

    Example:

    Input: [2, 3, 1, 1, 4, 3, -2, 1]
    Output: [2, 3, 1, 4, -2]

    Understanding the Problem

    The core challenge of this problem is to efficiently remove duplicates from the array while maintaining a linear time complexity. This is significant in scenarios where the array is large, and performance is critical.

    Common applications include data cleaning, where duplicate entries need to be removed, and in algorithms where unique elements are required for further processing.

    Potential pitfalls include using algorithms that do not meet the O(n) time complexity requirement, such as nested loops, which would result in O(n^2) complexity.

    Approach

    To solve this problem, we can use a Set data structure, which inherently does not allow duplicate values. This will help us achieve the desired time complexity of O(n).

    Naive Solution

    A naive solution would involve using nested loops to check for duplicates, but this would result in O(n^2) time complexity, which is not optimal.

    Optimized Solution

    An optimized solution involves using a Set to track unique values as we iterate through the array. This approach ensures that each element is processed only once, resulting in O(n) time complexity.

    Steps:

    1. Initialize an empty Set to keep track of unique values.
    2. Iterate through the input array.
    3. For each element, check if it is already in the Set.
    4. If it is not in the Set, add it to the Set.
    5. Convert the Set back to an array and return it.

    Algorithm

    Here is a step-by-step breakdown of the algorithm:

    1. Create an empty Set called uniqueSet.
    2. Loop through each element in the input array.
    3. For each element, check if it is in uniqueSet.
    4. If it is not in uniqueSet, add it to uniqueSet.
    5. After the loop, convert uniqueSet to an array and return it.

    Code Implementation

    // Function to remove duplicates from an array
    function removeDuplicates(arr) {
        // Initialize a Set to store unique values
        const uniqueSet = new Set();
        
        // Iterate through the array
        for (let num of arr) {
            // Add each element to the Set (duplicates will be ignored)
            uniqueSet.add(num);
        }
        
        // Convert the Set back to an array and return it
        return Array.from(uniqueSet);
    }
    
    // Example usage
    const inputArray = [2, 3, 1, 1, 4, 3, -2, 1];
    const uniqueArray = removeDuplicates(inputArray);
    console.log(uniqueArray); // Output: [2, 3, 1, 4, -2]
    

    Complexity Analysis

    The time complexity of this approach is O(n) because we iterate through the array once. The space complexity is also O(n) because, in the worst case, we store all elements in the Set.

    Edge Cases

    Consider the following edge cases:

    • An empty array: The output should be an empty array.
    • An array with all identical elements: The output should be an array with a single element.
    • An array with no duplicates: The output should be the same as the input array.

    Examples:

    Input: []
    Output: []
    
    Input: [1, 1, 1, 1]
    Output: [1]
    
    Input: [1, 2, 3, 4]
    Output: [1, 2, 3, 4]

    Testing

    To test the solution comprehensively, consider the following test cases:

    • Simple cases with a few elements.
    • Cases with all unique elements.
    • Cases with all duplicate elements.
    • Edge cases like an empty array.

    Example test cases:

    console.log(removeDuplicates([2, 3, 1, 1, 4, 3, -2, 1])); // [2, 3, 1, 4, -2]
    console.log(removeDuplicates([])); // []
    console.log(removeDuplicates([1, 1, 1, 1])); // [1]
    console.log(removeDuplicates([1, 2, 3, 4])); // [1, 2, 3, 4]
    

    Thinking and Problem-Solving Tips

    When approaching such problems, consider the following tips:

    • Understand the problem requirements and constraints thoroughly.
    • Think about the data structures that can help achieve the desired time complexity.
    • Start with a naive solution to understand the problem better, then optimize.
    • Practice similar problems to improve problem-solving skills.

    Conclusion

    In this blog post, we discussed how to remove duplicates from an array in O(n) time complexity using JavaScript. We explored the problem definition, understood the core challenges, and walked through an optimized solution using a Set. We also analyzed the complexity, considered edge cases, and provided testing strategies.

    Understanding and solving such problems is crucial for improving algorithmic thinking and coding skills. Keep practicing and exploring further to enhance your problem-solving abilities.

    Additional Resources

    For further reading and practice, consider the following resources:

    Keep going with JavaScriptAbout 340 step-by-step lessons, from your first line of code to coding interviews. Free to start.
    Start learning free