LeetCode 2488. 统计中位数为K的子数组

2023-11-10

题目描述

给你一个长度为 n 的数组 nums ,该数组由从 1 到 n 的 不同 整数组成。另给你一个正整数 k 。

统计并返回 nums 中的 中位数 等于 k 的非空子数组的数目。

注意:

  • 数组的中位数是按 递增 顺序排列后位于 中间 的那个元素,如果数组长度为偶数,则中位数是位于中间靠左的那个元素。
    • 例如,[2,3,1,4] 的中位数是 2 ,[8,4,3,5,1] 的中位数是 4 。
  • 子数组是数组中的一个连续部分。

示例 1:

输入:nums = [3,2,1,4,5], k = 4
输出:3
解释:中位数等于 4 的子数组有:[4][4,5][1,4,5]

示例 2:

输入:nums = [2,3,1], k = 3
输出:1
解释:[3] 是唯一一个中位数等于 3 的子数组。

提示:

  • n == nums.length
  • 1 <= n <= 105
  • 1 <= nums[i], k <= n
  • nums 中的整数互不相同

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/count-subarrays-with-median-k

题目分析

看到子数组就想办法套前缀和+哈希表

因为数组中的整数互不相同,所以除了k,其他数字要么比k大,要么比k小。中位数为k的子数组满足性质:

  • 如果子数组元素个数为奇数,数组内小于k和大于k的整数数量相等
  • 如果子数组元素个数为偶数,数组呢小于k的元素数量比大于k的元素数量少一个

处理题目中的nums数组,记小于k的整数为-1,大于k的整数为1,k为k_(因为子数组中必须包含k),再计算前缀和。此时满足条件的奇数长度数组的元素和为0,偶数长度数组的元素和为1。问题就转化为了求子数组和为0或1的数组个数

class Solution {
public:
    int countSubarrays(vector<int>& nums, int k) {
        int n = nums.size(), k_ = nums.size();
        unordered_map<int, int> mp;
        mp[0] = 1;
        int pre_sum = 0, res = 0;
        for (int i = 0; i < n; ++i) {
            if (nums[i] == k) {
                pre_sum += k_;
            } else if (nums[i] < k) {
                -- pre_sum;
            } else {
                ++ pre_sum;
            }
            if (mp.count(pre_sum - k_)) {
                res += mp[pre_sum - k_];
            } 
            if (mp.count(pre_sum - k_ - 1)) {
                res += mp[pre_sum - k_ - 1];
            }
            mp[pre_sum] ++;
        }
        return res;
    }
};

作者:daydayUppp
链接:https://leetcode.cn/problems/count-subarrays-with-median-k/solution/daydayuppp-zhuan-hua-wen-ti-ha-xi-biao-q-etua/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

总结

偷个懒。看到困难级的题就放弃了,学篇题解。自己尝试的时候想把k也当做0计算,发现bug很多,遂放弃。还是不要随便改别人的代码了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode 2488. 统计中位数为K的子数组 的相关文章

随机推荐

  • 【Linux】Linux中的gcc/g++编译器的使用

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 编译的过程 1 预处理阶段 1 1预处理的工作 头文件
  • 如何让2008服务器访问所有网页,Windows Server 2008 R2 下配置证书服务器和 HTTPS 方式访问网站...

    Windows Server 2008 R2 下配置证书服务器和 HTTPS 方式访问网站 实验准备 一台 Windows server 2008 r2 的虚拟机 实验目的 为什么要用 HTTPS 实验步骤 1 配置 CA 证书服务器 1开
  • Android Studio 的原生输入框控件 EditText 属性配置详解

    Android Studio 的原生输入框控件 EditText 属性配置详解 文本设置 android hint 默认文本设置 android textColorHint 95A1AA 默认文本颜色 android textColorHi
  • 论文笔记:N-BEATS: NEURAL BASIS EXPANSION ANALYSIS FORINTERPRETABLE TIME SERIES FORECASTING

    ICLR 2020 0 摘要 本文重点研究了利用深度学习解决单变量时间序列点预测问题 我们提出了一种基于后向和前向残留链路和一个非常深的全连接层堆栈的深度神经结构 该体系结构具有许多令人满意的特性 这些特性是可解释的 适用于广泛的目标领域而
  • Mybatis简介及其快速入门及其映射文件详解

    一 Mybatis简介 1 1原始jdbc操作 查询数据 1 2原始jdbc操作 插入数据 1 3 原始jdbc操作的分析 原始jdbc开发存在的问题如下 数据库连接创建 释放频繁造成系统资源浪费从而影响系统性能 sql 语句在代码中硬编码
  • Xilinx平台SRIO介绍(汇总篇)

    用最简单直白的语言记录复杂的FPGA设计 FPGA大叔 沃自己硕得 目录 前言 一 SRIO扫盲篇 RapidIO协议介绍 二 Xilinx平台SRIO IP核基础知识 三 SRIO时钟与复位 四 SRIO IP核配置使用教程 五 示例工程
  • 四旋翼无人机学习第4节--STM32、MPU9250等器件的绘制

    注意 本博客主要是复现小马哥四轴 即从画板 焊接 0 前言 当画stm32 mpu9250这种多引脚的芯片 就需要参考芯片手册啦 这里给大家推荐一个芯片手册查询网站 半导小芯 芯片查询工具 进入网站 输入芯片的具体名称 点击查询即可 最后点
  • 使用Maven构建微服务项目踩过的坑及学习心得(持续更新)

    前言 本文为个人在学习微服务架构的过程中的心得汇总 以便于自己未来回看和帮助其他遇到同样的问题的同学 初学者 敬请包涵 该文会随着学习阶段的深入不断改进和更新 1模块构建 1 1整模块打包 直接在微服务项目根目录下输入mvn clean i
  • wazuh 原理分析之Syscollector 系统信息收集工作流程

    wazuh是从ossec hids衍生过来的 部分架构设计有所不同 多进程多线程模式 本机的进程之间通过Unix domain socket 进行通信的 今天简单介绍一下数据搜集的相关功能的实现 Linux系统 注意由于篇幅所限 在函数中我
  • Facebook全球6小时宕机原因已查明:一条指令所致,内部工程师所为

    博雯 发自 凹非寺量子位 报道 公众号 QbitAI Facebook全球宕机6小时的原因 是公司内部工程师的一条错误指令 最近 Facebook官方针对这次大规模宕机的原因做了回应 这一新闻已经出现在了微博热榜 而在回复中 官方也 针对各
  • httprunner使用总结

    背景 在准备做接口自动化的过程中 了解到httprunner是一种简洁 不会代码的人也可以快速上手的框架 维护人员只需要编写并维护json或yaml文件 即可实现自动化测试 在结合httprunnerV2 X中文使用文档 应用于自己的项目中
  • WSDL实例解析

    WSDL的主要文档元素 WSDL文档可以分为两部分 顶部分由抽象定义组成 而底部分则由具体描述组成 抽象部分以独立于平台和语言的方式定义SOAP消息 它们并不包含任何随 机器或语言而变的元素 这就定义了一系列服务 截然不同的应用都可以实现
  • 类的默认成员函数2 --- 析构函数

    析构函数 1 概念 前面通过构造函数的学习 我们知道一个对象时怎么来的 那一个对象又是怎么没呢的 析构函数 与构造函数功能相反 析构函数不是完成对象的销毁 局部对象销毁工作是由编译器完成的 而对象在销毁时会自动调用析构函数 完成类的一些资源
  • RK3368 RK3128编译问题总结

    1 build build machine rk3288 kernel make rk3288 tb 8846 img scripts kconfig conf silentoldconfig Kconfig C build build m
  • 【1】python二级——操作题

    目录 基本操作题 题目一 题目二 题目三 简单应用 题目四 题目五 综合应用 题目六 问题1 问题2 总结 基本操作题 题目一 考生文件夹下存在一个文件PY102 py请写代码替换横线 实现以下功能 使用calendar模块 从键盘输入年份
  • 微信报错:“code“:“40001“

    微信通知报错 code 40001 code 40001 message invalid credential access token is invalid or not latest rid 6285b05b 6dc11ee1 4a77
  • 解决:class invalid for deserialization序列化的问题(真实有效)

    数据库连接失败 在数据库连接失败 经常会有蛮多一系列的问题导致的原因 这个时候一定要多去尝试一下各种方法 并且做好自己的梳理 一 例如我在SpringBoot项目中使用了阿里的数据库连接池Driud 有次在启动的时候 会报这样的错 Caus
  • Spring AOP面向切面编程:理解篇(一看就明白)

    一直想着怎么去通俗的讲解AOP 看了一篇文章受到了启发 https blog csdn net qukaiwei article details 50367761 下面我加入自己的理解 咱们来说说AOP 一 到底什么是AOP 面向切面编程
  • conda install R语言报错问题血泪解决

    今天在安装conda之后 想安装r语言环境 却遇到如下报错 真的超级郁闷 conda install r Collecting package metadata current repodata json failed CondaHTTPE
  • LeetCode 2488. 统计中位数为K的子数组

    题目描述 给你一个长度为 n 的数组 nums 该数组由从 1 到 n 的 不同 整数组成 另给你一个正整数 k 统计并返回 nums 中的 中位数 等于 k 的非空子数组的数目 注意 数组的中位数是按 递增 顺序排列后位于 中间 的那个元