Leetcode 3755. Find Maximum Balanced XOR Subarray Length

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。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值