首选用堆,一般用两个堆来求解中位数。




class MedianFinder {int count;PriorityQueue<Integer> max;PriorityQueue<Integer> min;/** initialize your data structure here. */public MedianFinder() {count = 0;max = new PriorityQueue<>((a,b)->b-a);min = new PriorityQueue<>();}public void addNum(int num) {count++;max.offer(num);min.offer(max.poll());if(count % 2 == 1) max.offer(min.poll());}public double findMedian() {if(count % 2 == 1){return (double)max.peek();}else{return ((double)max.peek() + (double)min.peek()) * 0.5;}}
}

字节一面问到

讲解:https://zhuanlan.zhihu.com/p/70654378

class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {int len1 = nums1.length;int len2 = nums2.length;if(len1 > len2) return findMedianSortedArrays(nums2, nums1);int k = (len1 + len2 + 1)/2;int left = 0, right = len1;while(right >= left){int i = left + (right-left)/2;int j = k-i;if(i < len1 && nums1[i] < nums2[j-1]) left = i+1;else if(i > 0 && nums2[j] < nums1[i-1]) right = i-1;else{int max_of_left = -1, min_of_right = -1;if(i == 0) max_of_left = nums2[j-1];else if(j == 0)  max_of_left = nums1[i-1];else max_of_left = Math.max(nums1[i-1], nums2[j-1]);if ((len1 + len2) % 2 == 1) return max_of_left;if(i == len1) min_of_right = nums2[j];else if(j == len2) min_of_right = nums1[i];else min_of_right = Math.min(nums1[i], nums2[j]);return (max_of_left + min_of_right) / 2.0;}}return 0.0;}
}

针对中位数求解的几道题相关推荐

  1. Excel在统计分析中的应用—第二章—描述性统计-分组数据的中位数的求解方法(组离散数据)

    对于未分组数据,可使用Excel的MEDIAN函数求解中位数. 对于分组数据,分为: 1. 组离散数据的中位数: 首先要构造累积频率分布表,然后通过累积频率分布表确定数据的中位数对应的观测值的位置,然 ...

  2. 【思维】中位数与顺序统计

    算法定义 在统计学中,中值(又称中位数)代表一个样本.种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分.对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中值.如果观察 ...

  3. HDU 3282 Running Median 动态中位数,可惜数据范围太小

    Running Median Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...

  4. LeetCode4寻找两个有序数组的中位数(二分查找+分治)

    目录 1.题目 2.分析 3.代码 二分查找:绝大多数二分查找问题利用的是单调性,也有一些例外)或者题目本身蕴含的可以逐渐缩小问题规模的特性解决问题.时间复杂度log级. 分治法的设计思想是:将一个难 ...

  5. 补充知识——结构光之解相位求解的相关问题

    摘要 本文将介绍常见的解相位的原理和和相关的知识. 结构光利用相位信息进行三维重建,主要包括解相位和展开相位,利用展开的相位计算深度信息.解相位,也称为相位提取,主要包括相移法,傅里叶变换解相,卷积法 ...

  6. MySQL查询求中位数最简单的写法

    直接上查询语句: select avg(a) from (select a,@a:=@a+1 b from t1,(select @a:=0) t2 order by a) t where b bet ...

  7. [BZOJ2653]middle

    [BZOJ2653]middle 题面 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整.给你一个 长度为n的序列s.回答Q个这样的询问:s的左 ...

  8. 数据结构--堆 Heap

    文章目录 1. 概念 2. 操作和存储 2.1 插入一个元素 2.2 删除堆顶元素 3. 堆排序(不稳定排序) 3.1 建堆 3.2 排序 3.3 思考:为什么快速排序要比堆排序性能好?两者都是O(n ...

  9. 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...

    作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11969497. 声明:版权所有,转载请注明出处,谢谢 ...

最新文章

  1. 简述DataInputStream和DataOuputStream
  2. 罗格斯大学电气与计算机工程专业怎么样,美国电子工程排名 - 电子计算机工程的研究生教育,特别是偏向电路设计方向,请问是美国罗格斯大学新布朗斯维克校区好还是清华...
  3. statCVS的问题剖析
  4. C#多线程学习(三) 生产者和消费者
  5. [css] 你有没有自己写过一套UI库?说下遇到哪些难点?
  6. Spring官方RSocket Broker 0.3.0发布: 快速构建你的RSocket架构
  7. Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转......
  8. qt lighthouse相关
  9. linux中快捷脚本,Linux下Shell编程快捷键大全(日常整理)
  10. 1078. Bigram 分词
  11. MyBatis3——入门介绍
  12. webstorm软件使用汉化包
  13. 图及其应用实验报告 c语言,图的应用 实验报告
  14. 烦请大家支持一票,谢谢!!
  15. 百度地理围栏的一个坑
  16. 网络连接存储(Network-attached storage,NAS)简介
  17. 远程安装WMF5.1遇到的坑
  18. mysql触发器联立删除_mysql触发器删除实例1
  19. 阿里linux内核月报201705
  20. window server 服务器安全日志记录

热门文章

  1. 高并发下如何保证数据的一致性
  2. 隐藏方法不能实现多态性
  3. Java输出特定时间段特定格式时间信息
  4. stucts2 页面上的值如何与Action的属性值对应
  5. linux的文件系统架构
  6. 利用支持MicroPython的TPYBoard开发板自制PM2.5检测仪(萝卜教育学科式编程)
  7. 十大面试问题解惑,秒杀一切HR、技术面试。iOS程序员必读!
  8. Spring学习笔记002 - AOP
  9. Django之Model操作
  10. 8月全球搜索引擎市场:百度位居第四 份额大涨