数据流中位数 · data stream median
[抄题]:
数字是不断进入数组的,在每次添加一个新的数进入数组的同时返回当前新数组的中位数。
[思维问题]:
[一句话思路]:
左边x个元素,右边要有x+1个元素,因此利用maxheap把左边的最大值揪出来,利用minheap把右边的最小值揪出来
如果maxHeap.peek() > minHeap.peek(),就不断流动,直到顺滑。
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:


[一刷]:
- 接口类是Queue<Integer>,指明里面的数据类型
- compare类无参数,里面的方法有参数
- maxheap也有参数,是cnt,cpr,因为要用到比较
- 这道题要求的是 不断添加之后,返回一个ans[]
[二刷]:
- 如果minHeap.isEmpty(),才需要讲总元素个数加一
- MinHeap,MaxHeap,numOfElements都是几个函数公用的数据结构,要声明为private类型后放在外面
[三刷]:
[四刷]:
[五刷]:
[总结]:
[复杂度]:Time complexity: O(n个数*add的lgn) Space complexity: O(n)
[英文数据结构,为什么不用别的数据结构]:
[其他解法]:
[Follow Up]:
[题目变变变]:
public class Solution {
/*
* @param nums: A list of integers
* @return: the median of numbers
*/
private Queue<Integer> MinHeap,MaxHeap;
private int numOfElements = 0;
public int[] medianII(int[] nums) {
int cnt = nums.length;
Comparator<Integer> revcmp = new Comparator<Integer>() {
public int compare(Integer left,Integer right) {
return right.compareTo(left);
}
};
MinHeap = new PriorityQueue<Integer>(cnt);
MaxHeap = new PriorityQueue<Integer>(cnt,revcmp);
int[] ans = new int[cnt];
for (int i = 0; i < cnt; i++) {
addNumber(nums[i]);
ans[i] = getMedian();
}
return ans;
}
//addNumber
private void addNumber(int value) {
MaxHeap.add(value);
if (numOfElements % 2 == 0) {
if (MinHeap.isEmpty()) {
numOfElements = 1;
return ;
}
else if (MaxHeap.peek() > MinHeap.peek()) {
int root_Of_MaxHeap = MaxHeap.poll();
int root_Of_MinHeap = MinHeap.poll();
MaxHeap.add(root_Of_MinHeap);
MinHeap.add(root_Of_MaxHeap);
}
}
else {
MinHeap.add(MaxHeap.poll());
}
numOfElements++;
}
//getMedian
private int getMedian() {
return MaxHeap.peek();
}
}
数据流中位数 · data stream median的更多相关文章
- [OJ] Data Stream Median (Hard)
LintCode 81. Data Stream Median (Hard) 思路: 用一个大根堆保存较小的一半数, 一个小根堆保存较大的一半数. 每次根据num和两个堆顶的数据决定往哪个堆里面放. ...
- lintcode 1: Data Stream Median
Data Stream Median Numbers keep coming, return the median of numbers at every time a new number adde ...
- LintCode "Sliding Window Median" & "Data Stream Median"
Besides heap, multiset<int> can also be used: class Solution { void removeOnly1(multiset<in ...
- [LeetCode] Find Median from Data Stream
Find Median from Data Stream Median is the middle value in an ordered integer list. If the size of t ...
- [LeetCode] Find Median from Data Stream 找出数据流的中位数
Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...
- [Swift]LeetCode295. 数据流的中位数 | Find Median from Data Stream
Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...
- [LeetCode] 295. Find Median from Data Stream ☆☆☆☆☆(数据流中获取中位数)
295. Find Median from Data Stream&数据流中的中位数 295. Find Median from Data Stream https://leetcode.co ...
- [LeetCode] 295. Find Median from Data Stream 找出数据流的中位数
Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...
- [leetcode]295. Find Median from Data Stream数据流的中位数
Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...
随机推荐
- C# CPU,硬盘,mac地址灯本地信息查询
public class Computer { public static string CpuID; //1.cpu序列号 public static string MacAddress; //2. ...
- Web Api in Orchard
Web Api in Orchard Web Api is available in Orchard. You can implement a web api to fit your needs in ...
- pycharm格式报错: Remove redundant parentheses
处理:所在代码行,最外层括号去掉
- django中使用Ajax
内容: 1.Ajax原理与基本使用 2.Ajax发送get请求 3.Ajax发送post请求 4.Ajax上传文件 5.Ajax设置csrf_token 6.django序列化 参考:https:// ...
- PHP写日志公共类
Txl_Log.php <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /** * * * ...
- Openstack虚机实例状态错误手工恢复vm_state:error
Openstack虚机实例状态错误手工恢复vm_state:error 1.找到状态为出错状态的VM.在数据库里面表现Status为ERROR而非ACTIVE. 2.找到出错状态VM的UUID. 3. ...
- php的精确计算
引言:一定要确保数据的准确性.这是一个好的程序员的基本素养. <?php /** * 精确加法 * @param [type] $a [description] * @param [type] ...
- HTML网页Table解析
procedure TForm27.Button1Click(Sender: TObject); var doc2: IHTMLDocument2; doc3: IHTMLDocument3; ita ...
- Activity服务类-3 FormService服务类
1.获取//通过流程定义ID获取表单字段集合StartFormData startFormData = formService.getStartFormData(processDefinitionId ...
- 学习写了一个点击按钮倒计时的jquery小插件
(function($) { $.fn.extend({ getSms: function(value) { value = $.extend({ wait: 60, //参数, 默认60秒 }, v ...