--- 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" companies: - { name: "Amazon", period: "Thirty Days", frequency: 39.1 } - { name: "Cisco", period: "Three Months", frequency: 100 } - { name: "Meta", period: "Three Months", frequency: 49.8 } - { name: "Google", period: "Three Months", frequency: 17.3 } - { name: "Akamai", period: "Six Months", frequency: 100 } - { name: "Bloomberg", period: "Six Months", frequency: 40.6 } - { name: "Microsoft", period: "Six Months", frequency: 32 } 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 ```