給定一個二進制數組 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
}