给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。
示例 1:
输入: nums = [0,1]
输出: 2
说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。
示例 2:
输入: nums = [0,1,0]
输出: 2
说明: [0, 1] (或 [1, 0]) 是具有相同数量 0 和 1 的最长连续子数组。
class Solution:
def findMaxLength(self, nums: List[int]) -> int:
pre_dict = {0:-1}
ret, presum = 0, 0
for index, num in enumerate(nums):
# 如果元素为0,前缀和添加-1,即把0当成-1看待,问题转化为求和为0的最长连续子数组
presum += -1 if num == 0 else 1
if presum in pre_dict:
# 如果当前前缀和出现在字典中,说明该前缀和在前面出现过,不断添加n个元素后,前缀和仍为
# 当前前缀和的值,说明中间的这n个元素和为0。
ret = max(ret, index - pre_dict[presum])
else:
pre_dict[presum] = index
return ret
剑指 Offer(专项突击版)- 剑指 Offer II 011. 0 和 1 个数相同的子数组 (20220715)
最新推荐文章于 2022-07-20 12:08:51 发布