Start learning free

LESSON 260 OF 410 · HASH TABLE

Number of Distinct Values II in O(n) Time Complexity using Python

Practice O(n) Read the full explanation

Given an array of integers, count how many distinct values exist in the array.

Example:

Input: [1, 5, -3, 1, -4, 2, -4, 7, 7]
Output: 6
Explanation: the distinct values in the array are [1, 5, -3, -4, 2, 7]

Note:

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


STEP 1 OF 6
    Ctrl + Enter to check

    PYTHON · HASH TABLE

    Distinct Values in Python, explained

    Understanding the Problem

    The core challenge of this problem is to efficiently count the number of distinct values in an array. This is a common problem in data processing and analysis, where we need to identify unique elements from a dataset. A potential pitfall is using a naive approach that may not meet the time complexity requirement.

    Approach

    To solve this problem, we can use a set data structure, which inherently handles uniqueness. By iterating through the array and adding each element to the set, we can ensure that only distinct values are stored. The size of the set at the end of the iteration will give us the count of distinct values.

    Let's break down the approach:

    • Initialize an empty set.
    • Iterate through each element in the array.
    • Add each element to the set (duplicates will be ignored).
    • The size of the set will be the number of distinct values.

    Algorithm

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

    1. Create an empty set called distinct_values.
    2. For each element num in the array:
      • Add num to distinct_values.
    3. Return the size of distinct_values.

    Code Implementation

    def count_distinct_values(arr):
        # Initialize an empty set to store distinct values
        distinct_values = set()
        
        # Iterate through each element in the array
        for num in arr:
            # Add the element to the set
            distinct_values.add(num)
        
        # The size of the set is the number of distinct values
        return len(distinct_values)
    
    # Example usage
    input_array = [1, 5, -3, 1, -4, 2, -4, 7, 7]
    print(count_distinct_values(input_array))  # Output: 6
    

    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) due to the storage of elements in the set.

    Edge Cases

    Consider the following edge cases:

    • An empty array: The output should be 0.
    • An array with all identical elements: The output should be 1.
    • An array with all distinct elements: The output should be the length of the array.

    Testing

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

    def test_count_distinct_values():
        assert count_distinct_values([]) == 0
        assert count_distinct_values([1, 1, 1, 1]) == 1
        assert count_distinct_values([1, 2, 3, 4, 5]) == 5
        assert count_distinct_values([1, 5, -3, 1, -4, 2, -4, 7, 7]) == 6
        assert count_distinct_values([0, 0, 0, 0, 0]) == 1
        print("All test cases pass")
    
    # Run tests
    test_count_distinct_values()
    

    Thinking and Problem-Solving Tips

    When approaching such problems, consider the following tips:

    • Understand the problem requirements and constraints.
    • Think about the data structures that can help achieve the desired time complexity.
    • Break down the problem into smaller steps and solve each step methodically.
    • Practice similar problems to improve problem-solving skills.

    Conclusion

    In this blog post, we discussed how to count the number of distinct values in an array efficiently using a set data structure. We covered the problem definition, approach, algorithm, code implementation, complexity analysis, edge cases, and testing. Understanding and solving such problems is crucial for data processing and analysis tasks.

    Additional Resources

    For further reading and practice, consider the following resources:

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