思路
- 考查点:哈希表
- 题目:1248. 统计「优美子数组」
- 思路: 从前往后统计奇数的个数,
k = curOdd - preOdd
目标奇数 = 当前前缀奇数总数 - 某个前面位置的前缀奇数总数。当我们把前缀奇数放入哈希表以后,等式转换为preOdd = curOdd - k
只要这个preOdd存在,就说明是我们需要的一个答案,依次累加进最终结果。
代码
class Solution {
public:
int numberOfSubarrays(vector<int>& nums, int k) {
unordered_map<int, int> mp;
int n = nums.size();
int cntOdd = 0;
int res = 0;
mp[0] = 1;
for(int i = 0; i < n; i++){
if(nums[i] & 1) cntOdd++;
res += mp[cntOdd - k];
mp[cntOdd]++;
}
return res;
}
};