525. 连续数组
给定一个二进制数组
nums
, 找到含有相同数量的 0
和 1
的最长连续子数组,并返回该子数组的长度。示例 1:
输入: nums = [0,1] 输出: 2 说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。
示例 2:
输入: nums = [0,1,0] 输出: 2 说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。
提示:
1 <= nums.length <= 10
5
nums[i]
不是0
就是1
通过次数44,882提交次数83,789
前缀和
思路
将0 转为 -1 ,问题就变成求最长和为0的子数组。
既然是求最长,所以,首先,字典value存放的是下标,其次,只有当当前sum_不在字典中时,才添加到字典中,如果在的话,就不去更新下标。
题解
class Solution: def findMaxLength(self, nums: List[int]) -> int: nums = [i if i == 1 else -1 for i in nums] hashmap = collections.defaultdict(int) hashmap[0] = -1 sum_ = 0 length = 0 # 相当于在找和为0的最长子数组 for i in range(0, len(nums)): sum_ += nums[i] temp = sum_ if temp in hashmap: length = max(length, i - hashmap[temp]) else: hashmap[sum_] = i return length