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

```
func findMaxLength(nums []int) int {
preSum := map[int]int{} //key: sum, v: index ( start from 1)
lenN := len(nums)
maxV := 0;
sum := 0;
for i:=0; i < lenN; i++ {
if nums[i] == 1 {
sum++
} else {
sum--
}
switch {
case sum == 0:
maxV = max(maxV,i+1)
break;
case preSum[sum] > 0:
maxV = max(maxV, i-preSum[sum] +1 )
break;
default:
preSum[sum] = i+1;
}
}
return maxV
}
func max(a,b int) int {
if a > b {
return a
}
return b
}
```