1. 解题思路
这一题是Leetcode周赛477的第二题,是一道medium的题目。
这一题的话我们只需要将每一个位置的所有前序数组中奇偶数的差值以及XOR的值做记录,那么对两个奇偶数差值与XOR数据完全一样的位置,那么他们之间的差值就必然满足XOR为0,且奇偶数个数相同。
因此,我们只需要记录下每一个前序XOR的和以及奇偶数差值的pair,然后计算其与第一个位置的差值即是当前位置作为终点时能够获得的最大子数组的长度,然后我们从中找出最大值即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def maxBalancedSubarray(self, nums: List[int]) -> int:
xor, delta = 0, 0
cache = {}
cache[(0, 0)] = 0
ans = 0
for i, num in enumerate(nums):
xor = xor ^ num
if num % 2 == 0:
delta += 1
else:
delta -= 1
if (xor, delta) in cache:
ans = max(ans, i+1-cache[(xor, delta)])
else:
cache[(xor, delta)] = i+1
return ans
提交代码评测得到:耗时581ms,占用内存48.91MB。
1877

被折叠的 条评论
为什么被折叠?



