题目

这道题不知道为什么开始一直想不明白,看到前几名的大佬们都是几分钟就搞定了,日常感叹自己的菜啊…
这道题主要使用前缀和。若到当前为止前缀和为奇数,那么前面有多少个前缀和为偶数的,当前就有多少个子数组和为奇数的(奇数+偶数=奇数);同理,若当前前缀和为偶数,则子数组和为奇数的个数=前缀和为奇数的个数。
class Solution {
public:
int numOfSubarrays(vector<int>& arr) {
long long even=0,odd=1;
long long res=0;
int mod=1000000007;
int n=arr.size();
long long sum=0;
for(int i=0;i<n;i++){
sum+=arr[i];
res= (res+(sum%2==0?even:odd))%mod;
if(sum%2==0){
odd+=1;
}else{
even+=1;
}
}
return (int)res;
}
};

241

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



