剑指offer-刷题笔记-中难题-JZ41 数据流中的中位数

牛客网剑指Offer - java版 剑指Offer - java版 文章目录剑指Offer - java版JZ01JZ02 替换空格JZ03 从尾到头打印链表JZ04 重建二叉树JZ05 用两个栈实现队列JZ06 旋转数组的最小数字JZ07 斐波那契数列JZ08 跳台阶问题JZ09 青蛙跳台阶JZ10 矩形覆盖JZ11 二进制中1的个数JZ12 数值的整数次方JZ13 调整数组顺序,使奇数位于偶数前面JZ14 链表中倒数第k个结点JZ15 反转链表JZ16 合并两个排序的链表JZ17 树的子结构JZ18 二叉树的镜像JZ19 顺时针打印矩阵J 阅读详情

剑指offer-刷题笔记-中难题-JZ41 数据流中的中位数

版本1

使用外部交换排序方法排序不断排序数组

class Solution {
public:
     //交换
    void swap(int &a,int &b)
    {
        int temp;
        temp = a;
        a = b;
        b = temp;
    }
    
    //交换排序-从小到大排序
    void swapSort(vector<int> &input)
    {
        for(int i = 0;i < input.size(); i++)
        {
            for(int j = i+1;j < input.size(); j++)
            {
                if(input[j] < input[i])
                {
                     swap(input[i],input[j]);
                }
            }
        }
    }
    vector<int>input;
    void Insert(int num) {
       input.push_back(num);
       swapSort(input);
    }
    double GetMedian() { 
       
       double res;
       if(input.size() % 2 == 1)
       {
           res =  input[input.size() / 2] * 1.0;
       }else if (input.size() % 2 == 0)
       {
           res = (input[input.size() / 2] + input[(input.size() / 2)-1]) * 0.5;   
       }
        return res;
    }

};

版本2

利用数据读入的时候排序

class Solution {
public:
  
    vector<int>input;
    void Insert(int num) {
        if(input.empty())
        {
            //input中没有数据,直接加入
            input.push_back(num);
        }else{
            //遍历排序,并插入
            int i = 0;
            for(;i < input.size();i++)
            {
                if(num < input[i])
                {
                    break;
                }
            }
            input.insert(input.begin()+i, num);
        }
    }
    double GetMedian() { 
       
       double res;
       int n = input.size();
       if( n % 2 == 1)
       {
           res =  input[n / 2] * 1.0;
       }else if (n % 2 == 0)
       {
           res = (input[n / 2] + input[(n / 2)-1]) * 0.5;   
       }
        return res;
    }

};

版本3

利用大顶堆和小顶堆的特性

class Solution {
public:
  
    //优先队列即PriorityQueue,是一种内置的机遇堆排序的容器,分为大顶堆与小顶堆,大顶堆的堆顶为最大元素,
    //其余更小的元素在堆下方,小顶堆与其刚好相反。且因为容器内部的次序基于堆排序,因此每次插入元素时间复杂
    //度都是O(log2n)O(log_2n)O(log 
    //n),而每次取出堆顶元素都是直接取出。

 //维护两个堆,取两个堆顶部即可
    void Insert(int num)
    {
        //先加入较小部分
        min.push(num);
        //将较小部分的最大值取出,送入到较大部分
        max.push(min.top());
        min.pop();
        //平衡两个堆的数量
        if(min.size() < max.size())
        {
            min.push(max.top());
            max.pop();
        }
        
    }
    
    double GetMedian() { 
        //奇数个
        if(min.size() > max.size())
            return (double)min.top();
        //偶数个
        else
            return (double)(min.top() + max.top()) / 2;
    }
private:
    //大顶堆,元素值较小
    priority_queue<int>min;
    //小顶堆,元素值都比大顶堆大
    priority_queue<int,vector<int>,greater<int>> max;
   
};
剑指offer所有编程练习总结分析 给出剑指offer所有题目描述和对应的解题思路,并且在最有给出对应的代码展示和测试内容 由于牛客剑指Offer题目经过整理和筛选,是面试备考的经典资源之一,因此它的重要性在面试准备过程中是很高的。做这些题目可以帮助面试者熟悉常见的面试题型、巩固基础知识、提升编程能力,为应对面试提供了很好的准备。然而,还需注意不仅仅局限于做题,理解背后的原理和思想同样重要,以便能够在面试时灵活运用和展示自己的能力。 阅读详情

相关推荐

富斯遥控器-ros机器人控制

富斯遥控器-ros机器人手柄控制

zkh7758的博客 1697

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

剑指 Offer 41. 数据流中的中位数题目思路解法 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof 题目 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3)

Miracle_m的博客 498

别再手动翻译PDF了!手把手教你用Zotero PDF Translate插件搞定外文文献(附最新GitHub下载链接)

本文详细介绍如何利用Zotero PDF Translate插件高效翻译外文文献,包括插件安装、配置及多引擎对比。通过划词翻译、段落翻译和全文翻译功能,显著提升科研工作效率,特别适合处理大量英文PDF文献的研究人员。

weixin_33712987的博客 771

剑指offer笔记(六) 第40题至第46题

剑指offer笔记(六) 第40题至第46题前言一、JZ40 最小的k个数二、JZ41 数据流中的中位数三、JZ42 连续子数组的最大和四、JZ43 1~n整数中1出现的次数五、JZ44 数字序列中某一位的数字六、JZ45 把数组排成最小的数七、JZ46 把数字翻译成字符串八、总结 前言 这次主要记录剑指offer的7道题,主要使用的语言是python,下面将对这7道题的一些感悟和知识点进行汇总! 提示:以下是本篇文章正文内容,下面案例可供参考 截图来源于LeetCode 一、JZ40 最小的k个数

weixin_42269028的博客 362

深入解析 Fiori Launchpad Notification:架构、配置与用户体验全景

开发者可继承接口,在注册自研 Provider,利用实例化消息;若想批量推送,可用API (

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 434

在 Zynq 7010 上运行 VxWorks 7.0 的详细流程【持续更新】

本文介绍了在Zynq 7010开发板上运行VxWorks 7.0的完整流程。主要包括:1)使用Vivado创建硬件设计,配置Zynq模块并生成比特流文件;2)通过Workbench 4创建VxWorks工程,配置启动参数并生成镜像;3)下载运行步骤。此外还讲解了使用Workbench 4开发VSB和VIP工程的方法,包括工程创建、配置和调试流程。文中提供了关键操作截图和注意事项,为开发者提供了完整的Zynq 7010平台VxWorks开发解决方案。

weixin_45397344的博客 1223

剑指offer(C++)-JZ41:数据流中的中位数(算法-排序)

C++实现——数据流中的中位数

翟天保的博客 1万+

Halcon算子知识:optical_flow_mg

光流(Optical Flow)是一种研究图像对齐的算法,一般包括两大类:稀疏光流和稠密光流。稀疏光流就是研究图像中稀疏点的光流,这些点一般是角点;稠密光流则是研究图像中所有点的偏移量。以下介绍halcon的基本光流算子optical_flow_mg的原理方法。该算子计算两个图片的光流法。 二、算子说明 optical_flow_mg(ImageT1, ImageT2 : VectorField : Algorithm, SmoothingSigma, Integration

gongdiwudu的专栏 1万+

剑指offer第2版:搜索算法(二分/DFS/BFS)

搜索的过程,本质就是排除!!!

weixin_51142926的博客 5323

【ESP32设备通信】-两个ESP32间UART通信

在本文中,我们将使用 Arduino IDE 的 UART 硬件库在两个 ESP32 板之间执行 UART 或串行通信。 要使用 USB 端口调试和编程 ESP32,需要使用称为通用异步接收器/发送器 (UART) 通信的串行端口。 对于大多数传感器和系统,主要的通信方法被认为是 UART。 为了共享工作负载、信息和执行不同的任务,有时需要在两个 ESP32 开发板之间进行通信。

视觉与物联智能 2991

C# NX二次开发-查找连续倒圆角面

可以通过ufun函数 UF_MODL_ask_face_type 和 UF_MODL_ask_face_props 可判断处理选择相应的一组圆角面。在QQ群里有人问怎么通过一个选择一个倒圆角面来自动选中一组倒圆角面。这个是初步思路,如果有更好的思路可回复讨论一下。

fhqiwmc的博客 617

剑指 Offer 41. 数据流中的中位数

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

庄小焱 343

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

《剑指offer》JZ41 ~ JZ50

《剑指offer》JZ41 ~ JZ50JZ41 和为S的连续正数序列JZ42 和为S的两个数字JZ43 左旋转字符串JZ44 翻转单词序列JZ45 扑克牌顺子JZ46 孩子们的游戏(圆圈中最后剩下的数)JZ47 求1+2+3+...+nJZ48 不用加减乘除做加法JZ49 把字符串转换成整数JZ50 数组中重复的数字 JZ41 和为S的连续正数序列 使用滑动窗口的思想,i表示窗口左边界,j为右边界,cnt为窗口内所有值总和,扩大窗口时右边界增加,缩小窗口左边界增加 class Solution { p

黑桃 881

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【剑指offer】JZ41 数据流中的中位数

我们来看看中位数的特征,它是数组中间个数字或者两个数字的均值,它是数组较小的一半元素中最大的一个,同时也是数组较大的一半元素中最小的一个。插入排序是排序中的一种方式,一旦一个无序数组开始排序,它前面部分就是已经排好的有序数组(一开始长度为0),而其后半部分则是需要排序的无序数组,插入排序的做法就是遍历后续需要排序的无序部分,对于每个元素,插入到前半部分有序数组中属于它的位置——即最后一个小于它的元素后。,则得到的平均数分别为5,(5+2)/2,3…输入:[5,2,3,4,1,6,7,0,8]

LouHerGetUp的博客 131

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

剑指offer:排序系列--JZ41 数据流中的中位数,中等

该代码实现了一个用双堆(大顶堆+小顶堆)维护数据流中位数的算法。大顶堆存储较小一半数字,小顶堆存储较大一半数字,保持两个堆大小相等或大顶堆多1个元素。插入时先判断数字所属区间,再通过堆顶交换确保数据有序性,最后调整堆大小平衡。获取中位数时,奇数情况直接返回大顶堆顶,偶数情况返回两堆顶平均值。该算法插入时间复杂度O(logn),查询中位数时间复杂度O(1),空间复杂度O(n)。

weixin_51243388的博客 177

剑指offer刷题总记——Java

剑指offerJZ1 二维数组中的查找JZ2 替换空格JZ3 从尾到头打印链表JZ7 斐波那契数列JZ14 链表中倒数第k个节点JZ15 反转链表JZ36 两个链表的第一个公共结点 JZ1 二维数组中的查找 题目:二维数组中的查找 public class Solution { //双重for循环,遍历查找 public boolean Find(int target, int [][] array) { //行遍历,array.length为行数 for(i

小叮当不懒的博客 742

【剑指offer-C++】JZ41:数据流中的中位数

【剑指offer-C++】JZ41:数据流中的中位数

❀雾里看花花里看雾❀ 147

剑指offer

​一刷 剑指offer 记录

dwtianwen的博客 1104

java 剑指offer之[数据结构 中等]JZ41 数据流中的中位数

题目的链接在这里:https://www.nowcoder.com/practice/9be0172896bd43948f8a32fb954e1be1 目录题目大意一、示意图二、解题思路数据结构 题目大意 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 一、示意图

wzw的博客 243

剑指offer第二版(Python3)--面试题41 : 数据流中的中位数

如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。

鲁班七号 432

剑指offer/Leecode思路及代码汇总(python)

以牛客网题号为准 JZ01-09:

qq_41105449的博客 2357

牛客网——python之剑指0ffer之67道在线编程——jz41-jz50

剑指0ffer—67道在线编程—jz41~jz50jz41 和为S的连续正数序列jz42 和为S的两个数字jz43 左旋转字符串jz44 翻转单词序列jz45 扑克牌顺子jz46 孩子们的游戏(圆圈中最后剩下的数)jz47 求前n项和jz48 不用加减乘除做加法jz49 把字符串转换成整数jz50 数组中重复的数字 jz41 和为S的连续正数序列 题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的

weixin_45666566的博客 268

【栈队列堆】【打卡83天】《剑指Offer》2刷:JZ41 数据流中的中位数

1、题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 数据范围:数据流中数个数满足,大小满足 进阶: 空间复杂度, 时间复杂度 2、算法分析 注意:无论基数还是偶数先排序 如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中...

CodingLJ 138

剑指offer刷题总结(c++)

大部分是官方题解或者是别人比较好的思路,有一些是自己写的。仅作为自己的学习笔记!

syuichihann的博客 1105
上一篇: 剑指offer-刷题笔记-中难题-JZ40 最小的K个数
下一篇: c++-基础知识-STL案例
xiaoliyu00
博客等级 码龄9年 4180粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值