每次思考都是一次进步
1、我用的是双指针(这里指数组下标)的做法,左指针指向当前状态的最左元素前一个元素,右指针指向当前状态最右元素。右指针先走,如果该数为奇数则sum++(sum为该状态下的奇数个数),当sum为k时count++(count记录优美子数组的个数),这是我们需要判断一下这个优美的子数组是否存在子数组是优美子数组,所以我们要判断左指针所指元素到该状态第一个奇数之间有多少个偶数,则代表着有多少优美子数组。以此迭代一遍整个数组,则可以得到优美子数组个数
class Solution {
public:
int numberOfSubarrays(vector<int>& nums, int k) {
int thesize=nums.size();
int begin=-1,end=0;
int sum=0,count=0;
while(end<thesize)
{
int i=1;
if(nums[end]%2!=0) ++sum;
while(sum>k) if(nums[++begin]%2!=0) --sum;
if(sum==k) ++count;
while(sum==k&&nums[begin+i]%2==0)
{
++count;
++i;
}
++end;
}
return count;
}
};