📅  最后修改于: 2023-12-03 15:22:35.502000             🧑  作者: Mango
在数组中找出具有相同数量的0和1的最长连续子数组。
例如:
输入:[0,1,0] 输出:2 解释:[0, 1] 是具有相同数量的0和1的最长连续子数组。
输入:[0,1,0,0,1,1,0] 输出:6 解释:[1,0,0,1,1,0] 是具有相同数量的0和1的最长连续子数组。
使用前缀和和哈希表。
具体步骤如下:
代码片段:
class Solution:
def findMaxLength(self, nums: List[int]) -> int:
dic = {0:-1}
max_len = 0
pre_sum = 0
for i in range(len(nums)):
if nums[i] == 0:
pre_sum -= 1
else:
pre_sum += 1
if pre_sum in dic:
max_len = max(max_len, i - dic[pre_sum])
else:
dic[pre_sum] = i
return max_len
时间复杂度:O(n)
空间复杂度:O(n)
该解法经过LeetCode测试,时间复杂度和空间复杂度表现都非常优秀。