中位数是有序序列最中间的那个数。如果序列的大小是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。

例如:

[2,3,4],中位数是 3

[2,3],中位数是 (2 + 3) / 2 = 2.5

给出一个数组 nums,有一个大小为 k 的窗口从最左端滑动到最右端。窗口中有 k 个数,每次窗口移动 1 位。你的任务是找出每次窗口移动后得到的新窗口中元素的中位数,并输出由它们组成的数组。

例如:

给出 nums = [1,3,-1,-3,5,3,6,7],以及 k = 3。

窗口位置                      中位数
---------------               -----
[1  3  -1] -3  5  3  6  7       11 [3  -1  -3] 5  3  6  7       -11  3 [-1  -3  5] 3  6  7       -11  3  -1 [-3  5  3] 6  7       31  3  -1  -3 [5  3  6] 7       51  3  -1  -3  5 [3  6  7]      6

因此,返回该滑动窗口的中位数数组 [1,-1,-1,3,5,6]

提示:
假设k是合法的,即:k 始终小于输入的非空数组的元素个数.

class Solution {
public:
    vector<double> medianSlidingWindow(vector<int>& nums, int k) {
        vector<double> res;
        multiset<int> small, large;
        for (int i = 0; i < nums.size(); ++i) {
            if (i >= k) {
                if (small.count(nums[i - k])) small.erase(small.find(nums[i - k]));
                else if (large.count(nums[i - k])) large.erase(large.find(nums[i - k]));
            }
            if (small.size() <= large.size()) {
                if (large.empty() || nums[i] <= *large.begin()) small.insert(nums[i]);
                else {
                    small.insert(*large.begin());
                    large.erase(large.begin());
                    large.insert(nums[i]);
                }
            } else {
                if (nums[i] >= *small.rbegin()) large.insert(nums[i]);
                else {
                    large.insert(*small.rbegin());
                    small.erase(--small.end());
                    small.insert(nums[i]);
                }
            }
            if (i >= (k - 1)) {
                if (k % 2) res.push_back(*small.rbegin());
                else res.push_back(((double)*small.rbegin() + *large.begin()) / 2);
            }
        }
        return res;
    }
};

480.滑动窗口中位数相关推荐

  1. leetcode 480. 滑动窗口中位数(堆+滑动窗口)

    中位数是有序序列最中间的那个数.如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) / 2 = 2 ...

  2. LeetCode 480. 滑动窗口中位数(大小堆升级版+set实现)

    1. 题目 中位数是有序序列最中间的那个数. 如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) ...

  3. [Swift]LeetCode480. 滑动窗口中位数 | Sliding Window Median

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  4. leetcode 滑动窗口

    滑动窗口 文章目录 滑动窗口 模板框架 [76. 最小覆盖子串](https://leetcode-cn.com/problems/minimum-window-substring/) 思路分析 代码 ...

  5. 5.18 优先队列(堆) 滑动窗口(二) 交换链表的节点

    295. 数据流的中位数 最简单的思路暴力法,每次读入数据都进行排序 但是中位数只对中间的一个或两个数据感兴趣,其他数没有必要进行交换或者比较 https://leetcode-cn.com/prob ...

  6. 239. 滑动窗口最大值

    给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 示例 1: 输 ...

  7. pandas计算滑动窗口中的中位数实战(Rolling Median of a Pandas Column):计算单数据列滑动窗口中的中位数、计算多数据列滑动窗口中的中位数

    pandas计算滑动窗口中的中位数实战(Rolling Median of a Pandas Column):计算单数据列滑动窗口中的中位数.计算多数据列滑动窗口中的中位数 目录

  8. 《剑指offer》-- 序列化二叉树、二叉搜索树的第k个节点、数据流中的中位数、滑动窗口的最大值

    一.序列化二叉树: 1.题目: 请实现两个函数,分别用来序列化和反序列化二叉树. 2.解题思路: (1)根据前序遍历规则完成序列化与反序列化.所谓序列化指的是遍历二叉树为字符串:所谓反序列化指的是依据 ...

  9. LeetCode 滑动窗口(Sliding Window)类问题总结

    导语 滑动窗口类问题是面试当中的高频题,问题本身其实并不复杂,但是实现起来细节思考非常的多,想着想着可能因为变量变化,指针移动等等问题,导致程序反复删来改去,有思路,但是程序写不出是这类问题最大的障碍 ...

  10. Leetcode1703. 得到连续 K 个 1 的最少相邻交换次数[C++题解]:难(货仓选址加强版+滑动窗口+前缀和)

    文章目录 题目分析 题目链接 题目分析 首先需要明确一点:最优结果中1的相对位置和开始时不会改变.否则的话就是交换两个1,会徒劳增加交换次数. 比如[1,0,0,0,0,0,1,1],最后变成[0,0 ...

最新文章

  1. HBuilder离线打包启用Chrome Inspect调试
  2. 计算机成绩统计优秀率,基于决策树算法的成绩优秀率分析与研究.pdf
  3. 将SAP订单以XML格式输出
  4. 用python画小黄人-怎么用python画小黄人
  5. 【鲁棒控制】平面2R型机器人的鲁棒逆推跟踪控制(matlab实现)
  6. 职场,最需要的是主动
  7. Linux系统glibc库版本信息查看
  8. 5个AIDA64激活密钥
  9. 最佳Bilibili下载工具及下载Bilibili视频方法
  10. 射频回波损耗、反射系数、电压驻波比、S参数的含义与关系
  11. 计算机声卡驱动程序,教大家如何安装声卡驱动【详细步骤】
  12. 对于拖延症的最好方法
  13. 安捷伦34401A六位半万用表
  14. 交换机 Port-Channel(端口汇聚)的 配置
  15. 数据挖掘:数据清洗——缺失值处理
  16. 快速学习计算机系统编程
  17. 【图解算法数据结构】(九)数学
  18. tcpmux TCP 端口服务多路复用
  19. linux 网络监测工具
  20. ARM芯片tops的计算方法

热门文章

  1. IIS 6.0 不能处理未知的 MIME 类
  2. python decimal.quantize()参数rounding的各参数解释与行为
  3. CSS中伪类选择器及伪元素
  4. 活用锚点解决的问题(由一个简单应用想到的许多)
  5. 大连理工计算机基础作业2,大工18秋《计算机应用基础》在线测试2答案
  6. phpstorm配置ftp,自动更新代码
  7. 算法学习:最短路径(Floyd、Bellman-ford、Dijkstra)
  8. 云电脑搭配量子计算机,量子计算机和量子模拟器
  9. WIFI篇(1.windows下的CMD命令)
  10. 数据库习题(填空题四)