--- title: '525. Contiguous Array' description: Given a binary array nums, return the maximum length of a contiguous subarray with an equal number of 0 and 1 icon: dot topics: - { name: "Array", slug: "array" } - { name: "Hash Table", slug: "hash-table" } - { name: "Prefix Sum", slug: "prefix-sum" } issue: "https://github.com/prdlk/leetcode/issues/39" sidebar: label: 'Contiguous Array' badge: 'Medium' --- ### Example 1: - Input: `nums = [0,1]` - Output: `2` - Explanation: [0, 1] is the longest contiguous subarray with an equal number of `0` and `1`. ### Example 2: - Input: `nums = [0,1,0]` - Output: `2` - Explanation: [0, 1] (or [1, 0]) is a longest contiguous subarray with equal number of `0` and `1`. ### Example 3: - Input: `nums = [0,1,1,1,1,1,0,0,0]` - Output: `6` - Explanation: `[1,1,1,0,0,0]` is the longest contiguous subarray with equal number of `0` and `1`. ### Constraints: - `1 <= nums.length <= 10^5` - `nums[i]` is either 0 or 1. ## Solution ```py class Solution: def findMaxLength(self, nums: List[int]) -> int: map = {0: -1} count = 0 longest = 0 for i, num in enumerate(nums): count += 1 if num == 1 else -1 if count in map: longest = max(longest, i - map[count]) else: map[count] = i return longest ```