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

1. 题目

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

例如:
[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 始终小于输入的非空数组的元素个数。
与真实值误差在 10 ^ -5 以内的答案将被视作正确答案。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sliding-window-median
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:
LeetCode 295. 数据流的中位数(大小堆)
LeetCode 703. 数据流中的第K大元素(优先队列)

参考我的博客 数据结构 堆(优先队列)
参考大小堆的思想,一个堆最多比另一个堆最多多一个元素,不再多讲,请参考上面链接

  • 关键要实现从堆中删除窗口左端点,那么用 set 来当做堆就可以突破优先队列(堆)不能删除非堆顶元素
  • 本题:小堆size = 大堆size or 小堆size = 大堆size+1
  • k 为 奇数,直接返回小堆顶 set.begin()
  • k 为 偶数,返回两个堆顶的平均值
class Solution {	// C++multiset<int> minheap;//begin 是小的元素multiset<int,greater<int>> maxheap;//begin 是大的元素
public:vector<double> medianSlidingWindow(vector<int>& nums, int k) {// k = 1,直接返回数组if(k == 1) return vector<double>(nums.begin(), nums.end());int n = nums.size(), i = 0, j = 0, idx = 0;long a, b;//避免溢出 longvector<double> ans(n-k+1);for( ; j < k; ++j)maxheap_minheap_add(nums[j]);//先加入k个a = (*maxheap.begin()), b = (*minheap.begin());ans[idx++] = (k&1) ? b : (a+b)/2.0;//记录中位数for(i = 0 ; j < n; ++i,++j){maxheap_minheap_del(nums[i]);//删除左端点maxheap_minheap_add(nums[j]);//加入右端点a = (*maxheap.begin()), b = (*minheap.begin());ans[idx++] = (k&1) ? b : (a+b)/2.0;//记录中位数}return ans;}void maxheap_minheap_add(int x){if(minheap.empty())minheap.insert(x);else if(maxheap.size() == minheap.size()){if(x >= *maxheap.begin())minheap.insert(x);else{minheap.insert(*maxheap.begin());maxheap.erase(maxheap.begin());maxheap.insert(x);}}else if(maxheap.size() < minheap.size()){if(x <= *minheap.begin())maxheap.insert(x);else{maxheap.insert(*minheap.begin());minheap.erase(minheap.begin());minheap.insert(x);}}}void maxheap_minheap_del(int x){if(maxheap.size() < minheap.size()){auto it = minheap.find(x);if(it != minheap.end())minheap.erase(it);else{maxheap.erase(maxheap.find(x));maxheap.insert(*minheap.begin());minheap.erase(minheap.begin());}}else if(maxheap.size() == minheap.size()){auto it = maxheap.find(x);if(it != maxheap.end())maxheap.erase(it);else{minheap.erase(minheap.find(x));minheap.insert(*maxheap.begin());maxheap.erase(maxheap.begin());}}}
};

108 ms 18.9 MB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matplotlib - 饼图、环形图 pie() 多重饼图 subplots() 所有用法详解

目录 基本用法 饼图中突出显示某部分 环形图&#xff08;空心饼图&#xff09; 多重饼图&#xff0c;并添加分割线 相较散点图和折线图&#xff0c;柱状图、饼图、箱线图是另外 3 种数据分析常用的图形&#xff0c;主要用于分析数据内部的分布状态或分散状态。饼图主要用于…

USACO2.11 The Castle hdu1198

题意&#xff1a; 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物&#xff1a;一张“幸运爱尔兰”&#xff08;一种彩票&#xff09;。结果这张彩票让他获得了这次比赛唯一的奖品——坐落于爱尔兰郊外的一座梦幻般的城堡&#…

LeetCode 1072. 按列翻转得到最大值等行数(查找相同的模式,哈希计数)

1. 题目 给定由若干 0 和 1 组成的矩阵 matrix&#xff0c;从中选出任意数量的列并翻转其上的 每个 单元格。 翻转后&#xff0c;单元格的值从 0 变成 1&#xff0c;或者从 1 变为 0 。 返回经过一些翻转后&#xff0c;行上所有值都相等的最大行数。 示例 1&#xff1a; 输入…

Matplotlib - 箱线图、箱型图 boxplot () 所有用法详解

目录 基本用法 水平箱线图&#xff0c;显示均值 改变箱线图的形状&#xff08;箱体的形状notch、异常值的形状sym&#xff09; 改变箱线图的颜色&#xff08;箱体边框的颜色、箱体填充色&#xff09; 相较散点图和折线图&#xff0c;柱状图、饼图、箱线图&#xff08;箱…

【转载】三极管,场效应管 工作原理小结

三极管属于流控器件&#xff0c;即Ib控制放大Ic&#xff0c; 场效应管属于压控器件&#xff0c;即Ugs控制Id。 二者都有三个工作区域&#xff0c;即截止区&#xff0c;恒流区和可变电阻区。 Ib小于开启电流时&#xff0c;Ic不受控&#xff0c;Rce很大&#xff0c;Ic很小&#x…

educoderpython答案顺序结构程序设计_答案汇总:土木机械类+计算机类

土木机械类(点击图片查看答案)理论力学1哈工大第7版机械设计濮良贵第9版机械原理西工大第8版材料力学1刘鸿文第5版结构力学1龙驭球第4版结构力学朱慈勉第2版工程力学范钦珊第2版材料力学2孙训方第5版理论力学教程水小平机械工程控制基础杨叔子第6版自动控制原理胡寿松第6版土力…

Pyecharts - 动态地图 geo()/ map() - 安装与用法详解

目录 安装Pyecharts 安装对应的地图拓展&#xff1a; 准备数据 使用 pyecharts 模块中的 Geo 函数&#xff1a; 使用 pyecharts 模块中的 map 函数&#xff1a; 把一些地域性比较明显的数据显示在一张地图上&#xff0c;远比给别人一个 Excel 文件好得多。 Matplotlib 中…

[编程启蒙游戏] 1. 猜数字

文章目录1. 游戏前提2. 游戏目的3. python代码4. 玩一玩1. 游戏前提 儿童能认识数字能比较数字大小 2. 游戏目的 培养孩子的二分查找思维 3. python代码 # python 3.7 环境 while True:n int(input("请输入一个数来猜&#xff1a;\n"))count 1print((\n*15))g…

《记得我们有约》17集

电视剧《记得我们有约》“来杯铁马咖啡吧&#xff01;“穿梭在苗栗田野&#xff0c;骑着铁马卖咖啡的叮当-江沐云&#xff0c;天性活泼开朗&#xff0c;意志坚强的她&#xff0c;从不向命运低头&#xff0c;在民宿里担任打杂帮手&#xff0c;勤快不怕苦又带些小霸道的个性&…

对照表 - 用心整理了一份国内985/211大学名单及其一流学科

主要根据用户所填的大学名称&#xff0c;用于用户画像时对用户分类 国内985/211大学名单&#xff0c;但其中未包含港澳台的学校&#xff0c;比如香港中文大学&#xff0c;香港理工大学等。 类型地区学校名称一流学科建设名单985北京清华大学法学、政治学、马克思主义理论、数…

生命银行怎么样_银行双职工家庭现状实录

和大多数银行女一样&#xff0c;我和老公也是同在银行上班相识&#xff0c;14年结婚&#xff0c;15年9月&#xff0c;大儿子出生&#xff0c;然后婆婆跟妈妈轮流照顾小孩&#xff0c;18年1月&#xff0c;小儿子出生&#xff0c;从此便开始了歇斯里底&#xff0c;腥风血雨的生活…

LeetCode 1049. 最后一块石头的重量 II(DP)

1. 题目 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。 假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&#xff0c;那么两块石头都会…

特征计算 - Jaccard 相似系数与 Python 代码实现

Jaccard 相似系数又称为Jaccard相似性度量&#xff08;Jaccard系数&#xff0c;Jaccard 指数&#xff0c;Jaccard index&#xff09;。用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大&#xff0c;样本相似度越高。定义为相交的大小除以样本集合的大小&#xff1a;…

LeetCode 1293. 网格中的最短路径(DP/BFS)

1. 题目 给你一个 m * n 的网格&#xff0c;其中每个单元格不是 0&#xff08;空&#xff09;就是 1&#xff08;障碍物&#xff09;。 每一步&#xff0c;您都可以在空白单元格中上、下、左、右移动。 如果您 最多 可以消除 k 个障碍物&#xff0c;请找出从左上角 (0, 0) 到…

员工奖金需要交税吗_企业为员工发福利 奖品奖金也需要缴税

原标题&#xff1a;企业为员工发福利 奖品奖金也需要缴税企业的福利待遇经常成为员工炫耀的资本&#xff0c;过生日企业准备了小礼品&#xff0c;各种节日为员工准备的物品&#xff0c;举办不容形式的年会的时候对先进工作者发放奖金、奖品及举行抽奖活动。那么&#xff0c;发放…

天气预报Dom解析(转)

view plain<span style"font-family:Arial, Verdana, sans-serif;color:#000000;"><span style"white-space: normal;"><span style"color:#000099;"> </span></span></span> DOM是用与平台无关和语言无关…

用户行为分析模型-(行为事件分析、用户留存分析、漏斗分析、行为路径分析、用户分群、点击分析)

最近有些忙&#xff0c;但是看到了很好的分析模型也要跟大家分享的&#xff0c;这篇博客有些粗糙&#xff0c;主要是po上一些链接供大家学习&#xff0c;有时间的话&#xff0c;我也会写出自己关于用户行为分析的理解的。 下面是关于用户行为分析常见的分析维度&#xff0c;有…

[scikit-learn 机器学习] 4. 特征提取

文章目录1. 从类别变量中提取特征2. 特征标准化3. 从文本中提取特征3.1 词袋模型3.2 停用词过滤3.3 词干提取和词形还原3.4 TF-IDF 权重扩展词包3.5 空间有效特征向量化与哈希技巧3.6 词向量4. 从图像中提取特征4.1 从像素强度中提取特征4.2 使用卷积神经网络激活项作为特征本文…

webgis 行政图报错_WebGIS 地图 示例源码下载

【实例简介】【实例截图】【核心代码】esri Deomhtml, body, #map {height: 100%;width: 100%;}body {background-color: #fff;overflow: hidden;}#BasemapToggle {position: absolute;right: 20px;top: 20px;z-index: 50;}#HomeButton {left: 25px;position: absolute;top: 93…

正则表达式 - 去掉乱码字符/提取字符串中的中文字符/提取字符串中的大小写字母 - Python代码

目录 1.乱码符号种类较少&#xff0c;用replace() 2.乱码字符种类较多&#xff0c;用re.sub() 3.提取字符串中的中文字符 4.提取字符串中的中文字符和数字 5.提取其他 数据清洗的时候一大烦恼就是数据中总有各种乱码字符&#xff0c;比如&#xff01;#&#xffe5;%……&a…