给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。
示例 1:
输入: nums = [0,1]
输出: 2
说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。
示例 2:
输入: nums = [0,1,0]
输出: 2
说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。
解题思路
维护一个变量bi,存储子数组[0,i]里面1和0的差值(1的数量-0的数量)
假设子数组为[i,j],若想具有相同数量 0 和 1
子数组中1的数量=子数组[0,j]中1的数量-子数组[0,i]中1的数量
子数组中0的数量=子数组[0,j]中0的数量-子数组[0,i]中0的数量
子数组中1的数量=子数组中0的数量
子数组[0,j]中1的数量-子数组[0,i]中1的数量=子数组[0,j]中0的数量-子数组[0,i]中0的数量
子数组[0,j]里面1和0的差值=子数组[0,i]里面1和0的差值
所以我们只需要找到相同的1和0的差值,就能判断它们具有相同数量的 0 和 1
代码
func findMaxLength(nums []int) (maxLength int) {max := func(a int, b int) int {if a > b {return a} else {return b}}m := map[int]int{}b:=0for i, num := range nums {if num==0{b--}else{b++}if b==0{maxLength=max(maxLength,i+1)m[b]=icontinue}index,has := m[b]if has{maxLength=max(maxLength,i-index)}else {m[b]=i}}return
}