---
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
```
