LeetCode 1524 Number of Sub-arrays With Odd Sum 思維
阿新 • • 發佈:2022-05-30
Given an array of integers arr
, return the number of subarrays with an odd sum.
Since the answer can be very large, return it modulo \(10^9 + 7\).
Solution
注意 \(subarray\) 是連續的序列。注意的一點是: \(\text{odd+odd/even+even = even}\),因此只有當奇偶性相反時,才有可能是奇數和。
我們只關心奇偶性,因此可以利用位運算。具體來說,我們可以用
\[arr[i]\& 1 \]來得到當前元素的奇偶性:\(1:\text{odd};0:\text{even}\)
可以發現,不論哪種情況,我們都可以歸結為: \[res = (res+count[1-cur])\ \%\text{ MOD} \]
點選檢視程式碼
class Solution { private: int res = 0, cur = 0; int MOD = int(1e9+7); int count[2]={1,0}; public: int numOfSubarrays(vector<int>& arr) { int n = arr.size(); if(n==1 && arr[0]%2==1)return 1; if(n==1 && arr[0]%2==0)return 0; for(int i=0;i<n;i++){ int fg = arr[i]&1;// odd 1 or even 0 cur ^= fg;// both odd/even or not // same: 0(odd+odd/even+even) not: 1(odd+even) res = (res + count[1-cur])%MOD; //cout<<res<<endl; count[cur]++; } return res; } };