Python - Minimum identical consecutive Subarray

The problem is to find the minimum identical consecutive subarray in a given array. This means finding the element that appears in the shortest consecutive sequence within the array.

Understanding the Problem

Given an array with consecutive repetitive elements, we need to find the element that has the shortest consecutive run. For example, in the array [0, 0, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5], the element 0 appears 2 times consecutively, while other elements appear 3 or 4 times consecutively. The result would be 0 since it has the minimum consecutive count.

Using Collections Module

Python's collections module provides specialized container datatypes. The defaultdict class is particularly useful as it automatically creates missing dictionary entries with a default value, eliminating KeyError exceptions.

Example of defaultdict

from collections import defaultdict

def default_value():
    return "Not available"

# Define the dict
dictry = defaultdict(default_value)
dictry["x"] = 10
dictry["y"] = 20

print(dictry["x"])
print(dictry["y"])
print(dictry["z"])  # No KeyError, returns default value
10
20
Not available

Algorithm Steps

  • Step 1 ? Import defaultdict from the collections module
  • Step 2 ? Initialize the array with consecutive identical elements
  • Step 3 ? Count consecutive runs of each element using a dictionary
  • Step 4 ? Find the minimum consecutive count in the dictionary
  • Step 5 ? Return the element with the minimum consecutive count

Implementation

from collections import defaultdict

def find_min_consecutive_subarray(arr):
    if not arr:
        return None
    
    # Dictionary to store consecutive counts
    consecutive_counts = defaultdict(int)
    
    # Count consecutive runs
    i = 0
    while i < len(arr):
        current_element = arr[i]
        count = 1
        
        # Count consecutive occurrences
        while i + 1 < len(arr) and arr[i + 1] == current_element:
            count += 1
            i += 1
        
        # Store minimum count for each element
        if current_element not in consecutive_counts or count < consecutive_counts[current_element]:
            consecutive_counts[current_element] = count
        
        i += 1
    
    # Find element with minimum consecutive count
    min_element = min(consecutive_counts, key=consecutive_counts.get)
    return min_element

# Test the function
array_items = [0, 0, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5]
print("The original list is:", array_items)

result = find_min_consecutive_subarray(array_items)
print("Minimum identical consecutive subarray element is:", result)
The original list is: [0, 0, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5]
Minimum identical consecutive subarray element is: 0

Alternative Approach Using groupby

Python's itertools.groupby() provides a more elegant solution for grouping consecutive identical elements ?

from itertools import groupby

def find_min_consecutive_groupby(arr):
    if not arr:
        return None
    
    # Group consecutive identical elements and find their lengths
    groups = [(key, len(list(group))) for key, group in groupby(arr)]
    
    # Find the group with minimum length
    min_group = min(groups, key=lambda x: x[1])
    return min_group[0]

# Test the function
array_items = [0, 0, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5]
print("The original list is:", array_items)

result = find_min_consecutive_groupby(array_items)
print("Minimum consecutive subarray element is:", result)
The original list is: [0, 0, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5]
Minimum consecutive subarray element is: 0

Complexity Analysis

The time complexity is O(n) where n is the number of elements in the array, as we iterate through the array once. The space complexity is O(k) where k is the number of unique elements in the array.

Conclusion

We implemented an algorithm to find the element with the minimum consecutive occurrences using Python's collections module and itertools. The groupby() approach provides cleaner code for handling consecutive identical elements in arrays.

Updated on: 2026-03-27T15:26:15+05:30

178 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements