力扣2588.统计美丽子数组数目
-
异或和 —— 前缀和
- 因为每个位置的1都必须是偶数个
- 联想到“异或”操作 (相同为0不同为1)
- 相同的两个1异或完就为0了
-
class Solution { public: long long beautifulSubarrays(vector<int>& nums) { int n = nums.size(); long long res=0; vector<int> s(n+1); for(int i=0;i<n;i++) s[i+1] = s[i] ^ nums[i]; unordered_map<int,int> cnt; for(int x:s) //先求答案 再记录++ res += cnt[x]++; return res; } };