Given a binary array nums, return the maximum length of a contiguous subarray with an equal number of 0 and 1.
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.
Constraints:
1 <= nums.length <= 105
nums[i] is either 0 or 1.
解題
func findMaxLength(nums []int) int {
ans := 0
sum := 0
prev := make(map[int]int)
for i, val := range nums {
if val == 1 {
sum++
} else {
sum--
}
if sum == 0 {
ans = i+1
} else {
id, ok := prev[sum]
if !ok {
prev[sum] = i
} else {
ans = max(ans, i-id)
}
}
}
return ans
}
func max(a int, b int) int {
if a > b { return a }
return b
}