【问题描述】[困难]

【解答思路】

1. 思路1






时间复杂度:O(logN) 空间复杂度:O(N)

import java.util.PriorityQueue;public class MedianFinder {/*** 当前大顶堆和小顶堆的元素个数之和*/private int count;private PriorityQueue<Integer> maxheap;private PriorityQueue<Integer> minheap;/*** initialize your data structure here.*/public MedianFinder() {count = 0;//maxHeap = new PriorityQueue<>(Collections.reverseOrder());maxheap = new PriorityQueue<>((x, y) -> y - x);minheap = new PriorityQueue<>();}public void addNum(int num) {count += 1;maxheap.offer(num);minheap.add(maxheap.poll());// 如果两个堆合起来的元素个数是奇数,小顶堆要拿出堆顶元素给大顶堆if ((count & 1) != 0) {maxheap.add(minheap.poll());}/*//如果不平衡则调整 不用countif (minHeap.size() > maxHeap.size()) {maxHeap.offer(minHeap.poll());}*/}public double findMedian() {if ((count & 1) == 0) {// 如果两个堆合起来的元素个数是偶数,数据流的中位数就是各自堆顶元素的平均值return (double) (maxheap.peek() + minheap.peek()) / 2;} else {// 如果两个堆合起来的元素个数是奇数,数据流的中位数大顶堆的堆顶元素return (double) maxheap.peek();}
//不用count
public double findMedian() {if (maxHeap.size() == minHeap.size()) {return (maxHeap.peek() + minHeap.peek()) * 0.5;}return maxHeap.peek();}}
}
2. 思路2

复杂度

class MedianFinder {Queue<Integer> A, B;public MedianFinder() {A = new PriorityQueue<>(); // 小顶堆,保存较大的一半B = new PriorityQueue<>((x, y) -> (y - x)); // 大顶堆,保存较小的一半}public void addNum(int num) {if(A.size() != B.size()) {A.add(num);B.add(A.poll());} else {B.add(num);A.add(B.poll());}}public double findMedian() {return A.size() != B.size() ? A.peek() : (A.peek() + B.peek()) / 2.0;}
}

【总结】

1.最大堆/最小堆初始化

最小堆
PriorityQueue minheap = new PriorityQueue<>();
最大堆
PriorityQueue maxheap = new PriorityQueue<>((x, y) -> y - x);
PriorityQueue maxHeap = new PriorityQueue<>(Collections.reverseOrder());

2.找规律 模拟过程 不可能是一蹴而就 而是多次失败后才能找到的规律和转移过程

转载链接:https://leetcode-cn.com/problems/find-median-from-data-stream/solution/you-xian-dui-lie-python-dai-ma-java-dai-ma-by-liwe/

参考链接:https://leetcode-cn.com/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof/solution/you-xian-dui-lie-wu-fei-hua-jian-dan-yi-dong-by-je/

参考链接:https://leetcode-cn.com/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof/solution/mian-shi-ti-41-shu-ju-liu-zhong-de-zhong-wei-shu-y/

[剑指offer]面试题第[41]题[Leetcode][第235题][JAVA][数据流中的中位数][优先队列][堆]相关推荐

  1. 剑指Offer:面试题33——把数组排成最小的数(java实现)(未完待续)

    问题描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 思路1: ...

  2. [剑指offer]面试题第[68-2]题[Leetcode][第236题][JAVA][二叉搜索树的最近公共祖先][递归]

    [问题描述][中等] 235/68-1 搜索二叉树 236/68-2 二叉树 [解答思路] 递归 时间复杂度:O(N) 空间复杂度:O(N) 情况 1. , 2. , 3. , 4. 的展开写法如下. ...

  3. [剑指offer]面试题第[57]题[Leetcode][第167题][JAVA][和为s的两个数字][两数之和][HashSet][二分][双指针]

    [剑指offer]面试题第[57]题[Leetcode][第167题][第1题] 有序无序之分 题目输出不同之分 以下解法按照[剑指offer]面试题第[57]题进行题解 [问题描述][简单] 输入一 ...

  4. 剑指offer——面试题41:和为S的连续整数序列

    剑指offer--面试题41:和为S的连续整数序列 Solution1:我的答案 基本思路是根据等差数列的前n项和推导出首项与项数的关系,设首项为a1a1a_1,项数为kkk,和为S" ro ...

  5. 算法题001 剑指Offer 面试题三:二维数组中的查找

    剑指Offer题目1:二维数组中的查找 题目描述: http://ac.jobdu.com/problem.php?cid=1039&pid=0 在一个二维数组中,每一行都按照从左到右递增的顺 ...

  6. 【剑指Offer面试题】 九度OJ1510:替换空格

    c/c++ 中的字符串以"\0"作为结尾符.这样每一个字符串都有一个额外字符的开销. 以下代码将造成内存越界. char str[10]; strcpy(str, "01 ...

  7. 剑指offer 面试题三 找出数组中重复的数字

    1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...

  8. (待补充)【n个骰子的点数】剑指offer——面试题43:n个骰子的点数

    剑指offer--面试题43:n个骰子的点数 [注意]此题再牛客网上没有OnlineJudge,在此补充解法. 题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值 ...

  9. (补充)【打印1到最大的n位数】剑指offer——面试题12:打印1到最大的n位数

    剑指offer--面试题12:打印1到最大的n位数 此题在牛客网上没有OnlineJudge,在此补充两种做法. 参考网址:https://blog.csdn.net/yanxiaolx/articl ...

最新文章

  1. Scala的异常处理
  2. Android 学习笔记 BroadcastReceiver广播...
  3. 053_Unicode字符官方标准四
  4. 高度平衡树 -- AVL 树
  5. “易+”开源 | 网易会议开源之移动端篇
  6. ServiceStack.Redis之IRedisClient第三篇
  7. Golang语言基础课件
  8. 同频切换的事件_LTE前台路测切换问题处理大礼包
  9. 爬虫的一些知识点 目录 1. 网络爬虫 1 2. 产生背景 垂直领域搜索引擎 2 3. 1 聚焦爬虫工作原理以及关键技术概述 3 4. 涉及技术 3 4.1. 下载网页 一般是通过net api
  10. 使用ffmpeg合并.h264文件
  11. jquery版本之间的冲突
  12. socket 服务器端和客户端通信,面向TCP的
  13. 公众号数据分析总结怎么做?教你玩转公众号后台数据
  14. JavaScript高级(二)
  15. Easyrecovery激活码生成器分享
  16. MATLAB求解一阶RC电路和二阶RLC电路
  17. github在线简历
  18. ERP 系统的应用对企业财务会计信息系统内部控制的影响
  19. Laravel -- 实战篇 自制二维码 Simple QrCode
  20. 【NLP】第8章 将 Transformer 应用于法律和财务文件以进行 AI 文本摘要

热门文章

  1. Oracle 更新Opatch、打补丁
  2. JavaWeb中验证码的实现
  3. 动态绑定 datagridview
  4. 解析IP地址与MAC地址
  5. [官方] mysql 性能优化文档(中英文自译)
  6. SPU、SKU、ARPU
  7. (csc)Visual C# 2010 编译器选项.
  8. 04 | 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
  9. 导入安全证书到jdk
  10. LeetCode 三数之和 — 优化解法