[抄题]:

数字是不断进入数组的,在每次添加一个新的数进入数组的同时返回当前新数组的中位数。

[思维问题]:

[一句话思路]:

左边x个元素,右边要有x+1个元素,因此利用maxheap把左边的最大值揪出来,利用minheap把右边的最小值揪出来

如果maxHeap.peek() > minHeap.peek(),就不断流动,直到顺滑。

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. 接口类是Queue<Integer>,指明里面的数据类型
  2. compare类无参数,里面的方法有参数
  3. maxheap也有参数,是cnt,cpr,因为要用到比较
  4. 这道题要求的是 不断添加之后,返回一个ans[]

[二刷]:

  1. 如果minHeap.isEmpty(),才需要讲总元素个数加一
  2. 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();
}
}

最新文章

  1. 第5章 Java数组
  2. Codevs 2370 小机房的树 LCA 树上倍增
  3. Java中系统属性Properties介绍 System.getProperty()参数大全
  4. .net面试题(.Net+Html+Javascript)
  5. 140个google面试题
  6. ActiveMQ(5.10.0) - Message Redelivery and DLQ Handling
  7. tinyXml在linux下的使用
  8. jquery 延迟加载代码
  9. 关于Sublime text 2中Emmet的安装 _html:xt无效
  10. SpringMVC(转)
  11. HDU1073:Online Judge
  12. [Angular Tutorial] 10 -More Templating
  13. php与mysql之间操作原理
  14. 对HTML5标签的认识(三)
  15. Python项目部署-使用Nginx部署Django项目
  16. Redis 4.0.2.3 for Windows (alpha) 下载地址
  17. react-eslintrc
  18. Scala - 快速学习01 - Scala简介
  19. Caffe2 Detectron安装错误记录
  20. mysql5.7.20安装

热门文章

  1. ssh-keygen的使用方法(无密码访问)
  2. keras的Embedding层
  3. Oracle 同一个字段的两值进行加减计算
  4. Web of Science数据库中文献相关信息下载与保存
  5. mysql监控以及调优
  6. mysql 的安装,密码及修改 ,权限,基础语句(增删改查)
  7. ORM sqlachemy学习
  8. springboot-dokcer
  9. phpmyadmin快速安装
  10. (15/24) 为webpack增加babel支持