【Hot100】LeetCode—295. 数据流的中位数

news2024/12/27 11:29:28

目录

  • 1- 思路
    • 题目识别
    • 堆实现
  • 2- 实现
    • 4. 寻找两个正序数组的中位数——题解思路
  • 3- ACM 实现


  • 原题链接:295. 数据流的中位数

1- 思路

题目识别

  • 识别1 :实现一个数据结构,求中位数

堆实现

思路

  • 利用优先队列,小根堆放较小的元素。
  • 大根堆放较大的元素。
  • 例如 1 2 3 4 5 6 ,其中大根堆放的元素是 1 2 3,小根堆放的元素是 4 5 6。中位数就是 (3+4)/2

实现

  • ① 当是偶数
    • 先入小根堆,之后大根堆添加小根堆堆顶元素。
  • ② 当是奇数
    • 先入大根堆,之后小根堆添加大根堆堆顶元素。

2- 实现

4. 寻找两个正序数组的中位数——题解思路

在这里插入图片描述

class MedianFinder {

    Queue<Integer> min;
    Queue<Integer> max;
    public MedianFinder() {
        min = new PriorityQueue<>((x,y) -> (y-x));
        max = new PriorityQueue<>();
    }
    
    public void addNum(int num) {
        if(min.size() == max.size()){
            min.add(num);
            max.add(min.poll());
        }else{
            max.add(num);
            min.add(max.poll());
        }
    }
    
    public double findMedian() {
        if(min.size() == max.size()){
            return (min.peek()+max.peek())/2.0;
        }else{
            return max.peek()*1.0;
        }
    }
}

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

3- ACM 实现

package Daily_LC.Month9_Week3.Day157;

import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;

/**
 * findMid
 *
 * @author alcohol
 * @Description
 * @since 2024-09-17 12:38
 */
public class findMid {

    static Queue<Integer> min;
    static Queue<Integer> max;

    public findMid(){
        min = new PriorityQueue<>((x,y) -> (y-x));
        max = new PriorityQueue<>();
    }

    public static void add(int num){
        if(min.size() == max.size()){
            min.add(num);
            max.add(min.poll());
        }else{
            max.add(num);
            min.add(max.poll());
        }
    }

    public static double getMid(){
        if(min.size() == max.size()){
            return (min.peek()+max.peek())*0.5;
        }else{
            return max.peek()*1.0;
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine(); // 消耗换行符
        findMid fm = new findMid();

        for(int i = 0 ; i < n ; i ++){
            String ope = sc.nextLine();
            if(ope.equals("addNum")){
                System.out.println("输入添加的数");
                int num = sc.nextInt();
                sc.nextLine(); // 消耗换行符
                fm.add(num);
            }else if(ope.equals("findMedian")){
                System.out.println(fm.getMid());
            }
        }
    }
}

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

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

相关文章

专科医院内外网数据摆渡,什么方法最“对症下药”?

专科医院是专门从事某一个或少数几个医学分科的医院。这些医院在特定的医学领域内具有较高的专业性和技术水平&#xff0c;通常致力于某一类疾病的预防、诊断和治疗。如传染病医院、口腔医院、肿瘤医院等。 根据相关法律法规和行业标准&#xff0c;涉及医疗数据的网络必须采取必…

影刀RPA实战:网页爬虫之携程酒店数据

1.实战目标 大家对于携程并不陌生&#xff0c;我们出行定机票&#xff0c;住酒店&#xff0c;去旅游胜地游玩&#xff0c;都离不开这样一个综合性的网站为我们提供信息&#xff0c;同时&#xff0c;如果你也是做旅游的公司&#xff0c;那携程就是一个业界竞争对手&#xff0c;…

Zookeeper 3.8.4 安装和参数解析

安装 zookeeper 之前必须先安装 JDK&#xff0c;有关Linux环境JDK可以参考我以前写的博文 1、关于Linux服务器配置java环境遇到的问题 2、Linux环境安装openJDK 3、Centos7.3云服务器上安装Nginx、MySQL、JDK、Tomcat环境 文章目录 1. zookeeper 安装2. 参数解析 1. zookeeper …

计算机视觉—3d点云数据基础

点云数据 3d点云数据由来 3d点云 3D Point Cloud是一种用于表示三维空间中对象或场景的数据结构。在最基础的形式中&#xff0c;它是一个包含多个三维坐标点&#xff08;X, Y, Z&#xff09;的集合。这些点是通过对实际物体或场景表面进行离散采样而获得的&#xff0c;因此&a…

使用高版本nodej报错:node: /lib64/libm.so.6: version `GLIBC_2.27‘ not found

如果要更新GLIBC_2.27会很繁琐&#xff0c;且耗时较长&#xff0c;所以建议下载带glibc的版本的nodejs 解决方案&#xff1a;下载带glibc的版本安装&#xff0c;如果是使用nvm则解压到对应的版本控制路径 我使用的版本是v20.16.0&#xff1a;Index of /download/release/v20.1…

基于GEE的Landsat 7ETM+条带填补

项目简介 该项目使用Google Earth Engine (GEE)平台&#xff0c;对Landsat 5和Landsat 7卫星影像进行预处理与影像填补操作。主要功能包括影像的选取、波段处理、缺失影像的填补以及最终影像的导出。代码中的核心功能是通过空间回归方法对Landsat 7和Landsat 5影像进行时序配准…

Oracle 19c异常恢复—ORA-01209/ORA-65088---惜分飞

由于raid卡bug故障,导致文件系统异常,从而使得数据库无法正常启动,客户找到我之前已经让多人分析,均未恢复成功,查看alert日志,发现他们恢复的时候尝试resetlogs库,然后报ORA-600 kcbzib_kcrsds_1错误 2024-09-15T17:07:32.55321508:00 alter database open resetlogs 2024-09-…

YOLOv9改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量

一、本文介绍 本文记录的是改进YOLOv9的损失函数&#xff0c;将其替换成Shape-IoU。现有边界框回归方法通常考虑GT&#xff08;Ground Truth&#xff09;框与预测框之间的几何关系&#xff0c;通过边界框的相对位置和形状计算损失&#xff0c;但忽略了边界框本身的形状和尺度等…

复习:指针

目录 指针变量 指针变量的内容 引入 指针变量的值 间接访问操作符 概念 运算 基本运算 指针/-整数 指针-指针 引入 算术运算和间接访问操作 自增自减运算符 前置 后置 应用 指针数组 语法 指针数组 数组指针 多级指针 引入 语法 章节问题 指针变量 指针…

Java数据结构(十一)——归并排序、计数排序

文章目录 归并排序算法介绍代码实现非递归实现复杂度和稳定性 计数排序算法介绍代码实现复杂度和稳定性 归并排序 算法介绍 归并排序是一种分而治之的排序算法。基本思想是&#xff1a; 将一个数组分成两半&#xff0c;对每半部分递归地应用归并排序先进行分解&#xff0c;然…

数据权限的设计与实现系列9——前端筛选器组件Everright-filter集成框架开发2

功能实现 ‍ 规则转换为 SQL 片段‍ 规则解析 首先我们来构造一个典型的规则&#xff0c;包括两个条件组&#xff0c;每个组由两个条件组成&#xff0c;由且与或两种逻辑关系&#xff0c;如下图&#xff1a; 然后看看生成的规则&#xff0c;如下&#xff1a; {"filt…

spring中对于servlet API的封装---springWeb

目录 一.springweb概述 二.springweb的特点 三.springweb的运行流程 四.springweb组件 五.springweb的搭建 1.导包 2.配置 DispatcherServlet 3.开启 springweb 注解 4.处理器的搭建 六.springweb注解 七.springweb拦截器 1.拦截器概述 2.拦截器的实现 (1)添加 servelt api 依赖…

开源 AI 智能名片链动 2+1 模式 O2O 商城小程序在社群活动中的应用与时机选择

摘要&#xff1a;本文探讨了开源 AI 智能名片链动 21 模式 O2O 商城小程序在社群经济中的重要性&#xff0c;着重分析了如何借助该小程序适时举办大型活动以维持和引爆社群活跃度。通过对活动时机选择的研究&#xff0c;强调了针对社群用户量身定制活动时机的必要性&#xff0c…

基于python+django+vue的外卖管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的外…

C/C++笔记

C/CPP笔记 杂记 struct msg_train和typedef struct msg_train 大小不一样 cstdio和stdio #include <stdio.h>int main() {printf("Hello, World!\n");return 0; } #include <cstdio>int main() {std::printf("Hello, World!\n");return 0; } 命…

20个Python入门基础语法要点

今天&#xff0c;我们将聚焦于Python的20个基础语法要点&#xff0c;让你的编程之旅更加顺畅。 第一部分&#xff1a;环境搭建与基本概念 1. Hello, World! 你的第一行代码&#xff1a;这是编程旅程的传统起点。 这行代码告诉Python显示文本&#xff0c;print是关键函数&…

常耀斌:AI赋能企业数字化转型(清华社发行)

新书地址&#xff1a; 清华出版社&#xff1a;清华大学出版社-图书详情-《AI赋能企业数字化转型》 京东&#xff1a;《AI赋能企业数字化转型 常耀斌 清华大学出版社 9787302669081》【摘要 书评 试读】- 京东图书 内容简介&#xff1a; 在数字经济时代&#xff0c;企业发…

曲线图如何绘制美观,曲线图10种美化方法

曲线图是比较常用的图形&#xff0c;本文以二维曲线图为例&#xff0c;展示曲线的图的不同美化方法&#xff0c;如图1所示&#xff0c;是一个标准的曲线图&#xff0c;横坐标为x&#xff0c;纵坐标为y, 图1 标准曲线图 调整方法1 首先可以通过改变线的颜色&#xff0c;不同…

从零开始学PostgreSQL (十四):高级功能

目录 1. 简介 2. 视图 3. 外键 4. 事务 5. 窗口函数 6. 继承 7. 结论 简介 PostgreSQL是一个强大且开源的关系型数据库管理系统&#xff0c;以其稳定性、功能丰富性和对SQL标准的广泛支持而闻名。它不仅提供了传统的关系型数据库功能&#xff0c;如事务处理、外键约束和视图&am…

递归基础训练-路径总和

路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 我们可以把之前的…