思路:找出所有奇数的下标,然后计算有多少种排列的方式并进行累加。
public int numberOfSubarrays(int[] nums, int k) {
List dict = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
if (nums[i]%2!=0)dict.add(i);
}
if (dict.size()<k)return 0;
if (dict.size()==k) return (dict.get(0)+1)*(nums.length-1-dict.get(k-1)+1);
int res = 0;
int L=0,R=k-1;
while(R<dict.size()){
// 到了最后一个
if (R==dict.size()-1){
res = res +(dict.get(L)-dict.get(L-1))*(nums.length-dict.get(R));
// 第一次为0,所以要加1
}else if (L==0){
res = res +(dict.get(L)-0+1)*(dict.get(R+1)-dict.get(R));
}else {
res = res +(dict.get(L)-dict.get(L-1))*(dict.get(R+1)-dict.get(R));
}
L++;R++;
}
return res;
}