給你一個整數數組 nums 和一個整數 k。
如果某個 連續 子數組中恰好有 k 個奇數數字,我們就認爲這個子數組是「優美子數組」。
請返回這個數組中「優美子數組」的數目。
簡要題解
首先我們遍歷一遍數組,爲奇設爲1不爲奇設爲0;之後記錄一下之前綴和出現的次數和前綴和的大小 然後答案即爲當前前綴和大小-k的數值出現的次數和相加即可。主要代碼如下:
class Solution {
public:
int numberOfSubarrays(vector<int>& nums, int k) {
for(int i=0;i<nums.size();i++)
{
if(nums[i]&1)nums[i]=1;
else nums[i]=0;
}unordered_map<long long,int>mp;
long long sum=0;
mp[0]=1;int ans=0;
for(int i=1;i<=nums.size();i++)
{
sum+=nums[i-1];
ans+=mp[sum-k];
mp[sum]++;
}
return ans;
}
};