当前位置: 首页 > news >正文

leetcode1248. 统计「优美子数组」

1 题目:统计「优美子数组」

官方标定难度:中

给你一个整数数组 nums 和一个整数 k。如果某个连续子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。

请返回这个数组中 「优美子数组」 的数目。

示例 1:

输入:nums = [1,1,2,1,1], k = 3
输出:2
解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。

示例 2:

输入:nums = [2,4,6], k = 1
输出:0
解释:数列中不包含任何奇数,所以不存在优美子数组。

示例 3:

输入:nums = [2,2,2,1,2,2,1,2,2,2], k = 2
输出:16

提示:

1 <= nums.length <= 50000
1 <= nums[i] <= 1 0 5 10^5 105
1 <= k <= nums.length

2 solution

代码

class Solution {
public:
int numberOfSubarrays(vector<int> &nums, int k) {
    unordered_map<int, int> map;
    map[0] = 1;
    int s = 0;
    int sol = 0;
    for (int i = 0; i < nums.size(); i++) {
        s += nums[i] % 2;
        sol += map[s - k];
        map[s]++;
    }
    return sol;
}
};

结果

在这里插入图片描述

3 优化

理论上 hash 的时间复杂度为 O(1),但是实际中总是差点意思,所以换成vector 有明显提升。

class Solution {
public:

int numberOfSubarrays(vector<int> &nums, int k) {
    vector<int> map(nums.size() + 1, 0);
    map[0] = 1;
    int s = 0;
    int sol = 0;
    for (int i = 0; i < nums.size(); i++) {
        s += nums[i] % 2;
        if(s >= k)
            sol += map[s - k];
        map[s]++;
    }
    return sol;
}

};

在这里插入图片描述

http://www.dtcms.com/a/94036.html

相关文章:

  • JavaScript获取元素及事件5种方法
  • 软考《信息系统运行管理员》- 5.5 信息系统数据资源的开发与利用
  • CLion配置问题解决
  • UML事务、关系、UML图(高软54)
  • 批量将多个 XPS 文档转换为 PDF 格式
  • AI PPT哪家强?2025年4款高效工具深度测评
  • android-enableJetifier作用
  • Manus智能体具体是指什么
  • 【前端】【面试】前端 Diff 相关考题及答案
  • Unity 编辑器中动画分割/创建动画剪辑
  • 分布式队列(java)
  • UML 图六种箭头含义详解:泛化、实现、依赖、关联、聚合、组合
  • 【力扣hot100题】(005)三数之和
  • CrossNorm与SelfNorm的具体实现
  • 【Python】编程50个经典操作
  • 向量数据库的适用场景与局限性分析
  • R²AIN SUITE 助力医药企业服务管理数智化转型
  • jmeter 镜像构建
  • PostgreSQL: GIN 索引详解
  • 详解c++中的可调用对象,std::function、Lambda表达式、std::bind等
  • AQUA爱克泳池设备从水质安全到舒适体验,全链路护航小区泳池健康
  • npm install 卡在创建项目:sill idealTree buildDeps
  • 使用react 引入相对路径文件
  • Golang Beego SQL链式查询(包含Join关联)
  • Git 之配置ssh
  • Python与面向对象编程的七大核心概念:解析与示例
  • 一周掌握Flutter开发--8. 调试与性能优化(下)
  • 内网渗透-CS免杀与应用开发
  • 操作系统实验7 显示进程列表
  • 中科亿海微SoM模组——AI图像推理解决方案