1248. 统计「优美子数组」

这篇博客探讨了一种使用哈希表解决LeetCode中的1248题——统计「优美子数组」的方法。通过维护前缀奇数总数,并利用哈希表存储历史前缀奇数计数,可以有效地计算出满足条件的子数组数量。代码中展示了如何实现这一思路,实现了高效的求解过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路

  • 考查点:哈希表
  • 题目: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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值