前缀和+哈希表
把数组中的0变成-1,这样具有相同数量0和1的子数组就等价于,前缀和相同的子数组。
接下来,只需要比较哪两个相同的值之间距离最大。
class Solution:
def findMaxLength(self, nums: List[int]) -> int:
length = len(nums)
for i in range(length):
if nums[i] == 0:
nums[i] = -1
maxvalue = 0
Hashtable = {}
Hashtable[0] = -1
total = list(accumulate(nums))
for i in range(length):
if total[i] in Hashtable:
if i - Hashtable[total[i]] > maxvalue:
maxvalue = i - Hashtable[total[i]]
else:
Hashtable[total[i]] = i
return maxvalue