剑指 Offer 41. 数据流中的中位数(java+python)

2023-11-16

如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。

例如,

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

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

设计一个支持以下两种操作的数据结构:

void addNum(int num) - 从数据流中添加一个整数到数据结构中。
double findMedian() - 返回目前所有元素的中位数。

示例 1:

输入:
["MedianFinder","addNum","addNum","findMedian","addNum","findMedian"]
[[],[1],[2],[],[3],[]]
输出:[null,null,null,1.50000,null,2.00000]

示例 2:

输入:
["MedianFinder","addNum","findMedian","addNum","findMedian"]
[[],[2],[],[3],[]]
输出:[null,null,2.00000,null,2.50000]

限制:

最多会对 addNum、findMedian 进行 50000 次调用。

java

class MedianFinder {
    PriorityQueue<Integer> maxHeap;
    PriorityQueue<Integer> minHeap;
    /** initialize your data structure here. */
    public MedianFinder() {
        maxHeap= new PriorityQueue<Integer>((x,y)->(y-x));
        minHeap= new PriorityQueue<Integer>();
    }
    
    public void addNum(int num) {
        if(maxHeap.size()!=minHeap.size()){
            minHeap.add(num);
            maxHeap.add(minHeap.poll());
        }
        else{
            maxHeap.add(num);
            minHeap.add(maxHeap.poll());
        }
    }
    
    public double findMedian() {
        if(maxHeap.size()!=minHeap.size())return minHeap.peek();
        else return (maxHeap.peek()+minHeap.peek())/2.0;
    }
}

/**
 * Your MedianFinder object will be instantiated and called as such:
 * MedianFinder obj = new MedianFinder();
 * obj.addNum(num);
 * double param_2 = obj.findMedian();
 */

python

class MedianFinder(object):

    def __init__(self):
        """
        initialize your data structure here.
        """
        self.maxHeap=list()
        self.minHeap=list()


    def addNum(self, num):
        """
        :type num: int
        :rtype: None
        """
        maxh=self.maxHeap
        minh=self.minHeap
        if len(maxh)!=len(minh):
            heapq.heappush(minh, -num)
            heapq.heappush(maxh, -heapq.heappop(minh))
        else:
            heapq.heappush(maxh, num)
            heapq.heappush(minh, -heapq.heappop(maxh))


    def findMedian(self):
        """
        :rtype: float
        """
        maxh=self.maxHeap
        minh=self.minHeap
        if len(maxh)!=len(minh):
            return -minh[0]
        else:
            return (-minh[0]+maxh[0])/2.0



# Your MedianFinder object will be instantiated and called as such:
# obj = MedianFinder()
# obj.addNum(num)
# param_2 = obj.findMedian()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑指 Offer 41. 数据流中的中位数(java+python) 的相关文章

  • 同一台机器上有多个Python版本?

    Python 网站上是否有关于如何在 Linux 上的同一台计算机上安装和运行多个版本的 Python 的官方文档 我可以找到无数的博客文章和答案 但我想知道是否有 标准 官方方法可以做到这一点 或者这一切都取决于操作系统 我认为它是完全独
  • Python:“直接”调用方法是否实例化对象?

    我是 Python 新手 在对我的对象进行单元测试时 我注意到一些 奇怪 的东西 class Ape object def init self print ooook def say self s print s def main Ape
  • 使用 Windows 任务计划程序安排 [Virtualenv 相关] Python 脚本

    I want to schedule a python script to start at 3AM and break at 5PM every weekday However the problem arises when I need
  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • django 中的身份验证方法返回 None

    你好 我在 django 中做了一个简单的注册和登录页面 当想要登录时 登录视图中的身份验证方法不返回任何内容 我的身份验证应用程序 模型 py from django db import models from django contri
  • 如何让 Streamlit 每 5 秒重新加载一次?

    我必须每 5 秒重新加载 Streamlit 图表 以便在 XLSX 报告中可视化新数据 如何实现这一目标 import streamlit as st import pandas as pd import os mainDir os pa
  • UseCompressedOops JVM 标志有什么作用以及何时应该使用它?

    HotSpot JVM 标志是什么 XX UseCompressedOops我应该做什么以及什么时候使用它 在 64 位 Java 实例上使用它 与不使用它 时 我会看到什么样的性能和内存使用差异 去年大多数 HotSpot JVM 都默认
  • 预测测试图像时出现错误 - 无法重塑大小数组

    我正在尝试使用 TensorFlow 和 Keras 在 Python 中进行图像识别 并且我已经关注了下面的博客 https stackabuse com image recognition in python with tensorfl
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • 无法将matplotlib安装到pycharm

    我最近开始使用Python速成课程学习Python编程 我陷入困境 因为我无法让 matplotlib 在 pycharm 中工作 我已经安装了pip 我已经通过命令提示符使用 pip 安装了 matplotlib 现在 当我打开 pych
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • titledBorder 标题中的图标

    您好 是否可以在 titledBorder 的标题中放置一个图标 例如以下代码 import java awt GridLayout import javax swing JFrame import javax swing JLabel i
  • 在 Java 中通过 D-Bus MPRIS 访问 Clementine 实例

    我使用 Clementine 作为音乐播放器 它可以通过 D Bus 命令进行控制 在命令行上 使用 qdbus 我可以 Start Stop 暂停播放器 强制它跳过播放列表中的歌曲 检查播放列表的长度 检查播放列表中当前播放的曲目及其元数
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • 使用 Numpy 进行多维批量图像卷积

    在图像处理和分类网络中 一个常见的任务是输入图像与一些固定滤波器的卷积或互相关 例如 在卷积神经网络 CNN 中 这是一种极其常见的操作 我已将通用版本任务减少为 Given 一批 N 个图像 N H W D 和一组 K 个滤镜 K H W
  • python 日志记录替代方案 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 蟒蛇记录模块 http docs python org library logging html使用起来
  • Spring 作为 JNDI 提供者?

    我想使用 Spring 作为 JNDI 提供程序 这意味着我想在 Spring 上下文中配置一个 bean 可以通过 JNDI 访问该 bean 这看起来像这样
  • 正则表达式 - 匹配不包含字符串的模式

    我对正则表达式很陌生 并且一直在寻找方法来做到这一点 但没有成功 给定一个字符串 我想删除以 abc 开头 以 abc 结尾且中间不包含 abc 的任何模式 如果我做 abc abc abc 它将匹配以 b 开头 以 abc 结尾并且中间包
  • 用 Beautiful Soup 进行抓取:为什么 get_text 方法不返回该元素的文本?

    最近我一直在用 python 开发一个项目 其中涉及抓取一些网站的一些代理 我遇到的问题是 当我尝试抓取某个知名代理站点时 当我要求 Beautiful Soup 查找 IP 在代理表中的位置时 它并没有按照我的预期执行操作 我将尝试查找每

随机推荐

  • JS document.write()换行

    一开始想到的是用 n 未能达到换行效果 通过多个参数实现换行效果 通过传递多个参数 即可实现换行效果 document write br ar 效果 示例源码
  • Qt实战 信号槽有哪些连接方式?

    相信大多数面试过Qt的同学都会被问的问题 是的 因为在Qt的世界中 这简直太太太基础啦 而你只知道Qt AutoConnection 从未关心过其他连接方式 如果被我说中了 那就耐心看完吧 Qt AutoConnection 自动连接 这是
  • 七大排序算法

    目录 直接插入排序 希尔排序 直接选择排序 堆排序 冒泡排序 快速排序 快速排序优化 非递归实现快速排序 归并排序 非递归的归并排序 排序 所谓排序 就是使一串记录 按照其中的某个或某些关键字的大小 递增或递减的排列起来的操作 常见的排序算
  • redis基础4——RDB持久化、AOF持久化全面深入解读

    文章目录 一 redis持久化机制 1 1 持久化的背景 1 2 两种持久化概念 1 2 1 快照方式 RDB 1 2 2 文件追加方式 AOF 1 3 rdb持久化 Redis Database 1 3 1 快照原理 1 3 2 触发机制
  • 组合聚合的概念

    聚合的概念 聚合 Aggregation 关系是关联关系的一种 是强的关联关系 聚合是整体和个体之间的关系 例如 汽车类与引擎类 轮胎类 以及其它的零件类之间的关系便整体和个体的关系 聚合关系也是通过实例变量实现的 在聚合关系中 两个类是处
  • shell脚本中遇到错误时中断程序运行,不再执行后面的程序

    shell脚本中遇到错误时中断程序运行 不再执行后面的程序 当你在脚本中写了一连串的代码时 如果后面的代码需要前面代码执行正确才能继续执行时 你可以使用set e vim test sh新建一个脚本文件 bin bash 设置程序出错时不再
  • 【软件工程】静态测试与动态测试

    静态测试 桌前检查 代码走查 代码审查 动态测试 黑盒测试 等价类划分 确定无效与有效等价类 设计用例尽可能多的覆盖有效类 设计用例只覆盖一个无效类 边界值分析 处理边界情况时最容易出错 选取的测试数据应该恰等于 稍小于或稍大于边界值 错误
  • python爬虫返回百度安全验证

    我一开始用的是requests库 header加了accept和user agent 这是一开始的代码 import requests headers Accept text html application xhtml xml appli
  • SpringBoot项目使用EasyPoi实现导入导出,就是这么的丝滑

    在项目的开发工程中 经常有导入导出数据的常见功能场景 Apache的POI是处理导入导出中最常用的 但是其原生的用法太复杂 很繁琐 总是在Copy 无意间发现一款简单粗暴的神器EasyPoi EasyPoi也是基于POI的 在SpringB
  • 使用vpd进行行级控制

    在系统用户下 1 创建vpd用户 create user vpd identified by 123456 grant resource connect to vpd grant execute on dbms rls to vpd gra
  • 高德地图, 动态绘制多个marker 并 随着地图缩放, 判定marker之间的距离, 显示不同 marker 效果

    转载
  • JVM系统线程

    虚拟机线程 这种线程的操作时需要JVM达到安全点才会出现 这些操作必须在不同的线程中发生的原因是他们都需要JVM达到安全点 这样堆才不会变化 这种线程的执行类型包括 stop the world 的垃圾收集 线程栈收集 线程挂起以及偏向撤销
  • MFC Windows程序设计1_3

    使用VS2008生成MFC程序 选择对话框形式 主要的需要注意的 在App类中 重写InitInstance 函数 MyDlg dlg m pWindow dlg dlg doModal return FALSE 注意InitInstanc
  • 读书有感:《失业的程序员》

    失业的程序员 是我在三天前心血来潮找来的一本书 这是一本极其易读 风趣横生的关于程序员从失业到创业的小说类书籍 书中主人公从一开始辞职失业 到整合资源开始创业 再到最后看似创业已经稳定却是艰难险阻 创业团队也从一开始的 2 人 到 10 多
  • HTML5(十一)——WebSocket 基础教程

    一 为什么要学 WebSocket websocket 是 HTML5 提供的一种长链接双向通讯协议 使得客户端和服务器之间的数据交换更简单 允许服务端主动向客户端推送数据 并且客户端与服务端只需连接一次 就可以保持长久连接 并进行数据通信
  • Unity 委托 (Delegate) 的简单理解以及实现

    委托相当于把某一个方法当成参数 当执行委托的时候就相当于执行了方法 所以这个方法必须和委托具有相同的参数类型 委托的简单实现 using UnityEngine 委托 代理 是存有对某个方法的引用的一种引用类型变量 委托语法 delegat
  • 蓝桥杯冲击01 - 质数篇

    目录 前言 一 质数是什么 二 易错点 三 试除法判断是否为质数 四 质数常考三大模型 五 真题练手 前言 距离蓝桥杯还有一个月 高效复习蓝桥杯知识 质数相关的题目在蓝桥杯中经常出现 例如 2016年蓝桥杯省赛初赛第四题就是要求判断一个数是
  • 基于宽表的数据建模

    一 业务背景 1 1 数据建模现状 互联网企业往往存在多个产品线 每天源源不断产出大量数据 这些数据服务于数据分析师 业务上的产品经理 运营 数据开发人员等各角色 为了满足这些角色的各种需求 业界传统数仓常采用的是经典分层模型的数仓架构 从
  • 部分安卓端ncnn模型推理输出数据存在大量-nan和nan的问题

    原文issue链接 部分安卓端ncnn模型推理输出数据存在大量 nan的问题 Issue 3607 Tencent ncnn github com 问题描述 onnx ncnn模型在pc端推理输出结果正确且基本一致 在部分安卓设备上使用同一
  • 剑指 Offer 41. 数据流中的中位数(java+python)

    如何得到一个数据流中的中位数 如果从数据流中读出奇数个数值 那么中位数就是所有数值排序之后位于中间的数值 如果从数据流中读出偶数个数值 那么中位数就是所有数值排序之后中间两个数的平均值 例如 2 3 4 的中位数是 3 2 3 的中位数是