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
}