用标准的双指针,即统计某个前缀中,奇数出现最多x次的个数。可以做别的类似题。
class Solution {
public:
int cal(vector<int>& nums,int k){
int cnt=0,ans=0;
for (int i=0,j=0;i<nums.size();i++){
if (nums[i]%2) cnt++;
while (cnt>k){
if (nums[j++]%2) cnt--;
}
ans+=i-j;
}
return ans;
}
int numberOfSubarrays(vector<int>& nums, int k) {
return cal(nums,k)-cal(nums,k-1);
}
};