2588 统计美丽子数组数目

·   ·   ·   ·

  ·   ·


题目链接

2588. 统计美丽子数组数目

分析

对于美丽子数组来说,统计其中所有数在二进制下 $1$ 的位置,每一个位置的数量均为偶数

故原问题等价于判断数组异或和是否为 $0$

又异或操作满足结合律,且任何数于其自身做异或操作为 $0$

所以我们使用前缀和来计算子数组的异或和,使用哈希表记录前缀数组异或和出现的次数

遍历计算即可

代码实现

class Solution {
public:
    long long beautifulSubarrays(vector<int>& nums) {
        long long ans = 0;
        int t = 0;
        unordered_map<int, int> um;
        um[0] = 1;
        for(int x : nums) {
            t ^= x;
            ans += um[t]++;
        }
        return ans;
    }
};

复杂度分析

  • 时间复杂度:$O(n)$
  • 空间复杂度:$O(n)$