题目
输入: nums = [0,1,0]
输出: 2
说明: [0, 1] (或 [1, 0]) 是具有相同数量 0 和 1 的最长连续子数组。
解法
- 0换成-1
- 前缀和 + 哈希表(字典)
class Solution:
def findMaxLength(self, nums: List[int]) -> int:
# preprocessing
n = len(nums)
preSum = [0] * (n+1)
t = 0
for i in range(n):
if not nums[i]:
nums[i] = -1
t += nums[i]
preSum[i+1] = t
# print(preSum)
# main
dic = {}
length = 0
for i in range(n+1):
if preSum[i] in dic:
length = max(i - dic[preSum[i]], length)
# print(i, length, dic)
dic[ preSum[i] ] = min(dic[ preSum[i] ], i)
else:
dic[preSum[i]] = i
return length