Soyo

Contiguous Array

Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and 1.

Example 1:

``````Input: [0,1]
Output: 2
Explanation: [0, 1] is the longest contiguous subarray with equal number of 0 and 1.
``````

Example 2:

``````Input: [0,1,0]
Output: 2
Explanation: [0, 1] (or [1, 0]) is a longest contiguous subarray with equal number of 0 and 1.
``````

Note: The length of the given binary array will not exceed 50,000.

## Solution

Count appearance of one and zero
Save different of appearance in a hashtable for further comparision

``````class Solution {
func findMaxLength(_ nums: [Int]) -> Int {
var zeroAppearance = 0
var oneAppearance = 0

var firstIndex = [0: -1]
var longest = 0

for i in 0..<nums.count {
if nums[i] == 0 {
zeroAppearance += 1
}else{
oneAppearance += 1
}

let diff = zeroAppearance - oneAppearance

guard let found = firstIndex[diff] else {
firstIndex[diff] = i
continue
}

longest = max(i - found, longest)
}

return longest
}
}
``````