给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。
示例 1:
输入: nums = [0,1]
输出: 2
说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。
示例 2:
输入: nums = [0,1,0]
输出: 2
说明: [0, 1] (或 [1, 0]) 是具有相同数量 0 和 1 的最长连续子数组。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/A1NYOS
【python】前缀和+字典
class Solution:
def findMaxLength(self, nums: List[int]) -> int:
#利用前缀和思想+哈希表,定义counter,遇0减1 , 遇1加1.
counter = 0
#定义字典,存放前缀和与当前坐标。设置首置位前缀和为0,当数组两个元素的情形,1- (-1) = 2
preSum = {0:-1}
#定义最大连续子串长度,如果当前前缀和字典中存在时,那么i - preSum【counter】便是当前等0的连续子串
maxLen = 0
for i in range(len(nums)):
#计算前缀和counter
counter += 1 if nums[i] == 1 else -1
#判断字典中是否有当前前缀和, 那么i - preSum【counter】便是当前等0的连续子串
if counter in preSum:
maxLen = max(maxLen,i - preSum.get(counter))
#没有时,存放counter和当前元素下标,当已经存在不用更新下标,现在求最长连续数组,
else:
preSum[counter] = i
return maxLen



