Skip to content

525. Contiguous Array

Summary

Solution Approach Explanation (1-minute) Time Complexity Space Complexity
Brute Force For every subarray, count 0s and 1s; if equal, update max length. \(O(n^2)\) \(O(1)\)
Hash Map (Optimal) Use a running count (increment for 1, decrement for 0) and store first occurrence of each count in a hash map. If the same count is seen again, the subarray between indices has equal 0s and 1s. \(O(n)\) \(O(n)\)

Implementation

class Solution:
    def findMaxLength(self, nums: List[int]) -> int:
        result = 0
        num_zeros = 0
        num_ones = 0

        prefix_diff = {}
        for i, n in enumerate(nums):
            num_zeros += 1 if n == 0 else 0
            num_ones += 1 if n == 1 else 0

            diff = num_ones - num_zeros
            if diff == 0:
                result = num_zeros + num_ones
            else:
                if diff not in prefix_diff:
                    prefix_diff[diff] = i
                else:
                    j = prefix_diff[diff]
                    result = max(result, i-j)
        return result