方法1:使用动态数组做。
!回顾 arrayList 、Linklist array区别:
Array:静态数组
arrayList:基于动态数组,参见https://www.cnblogs.com/battlecry/p/9374497.html
Linklist:基于动态链表,参见https://blog.csdn.net/qedgbmwyz/article/details/80108618
arrayList相比Linklist更适合查询和读取,因为LinkedList要移动指针。Linklist相比arrayList更适合增删操作,因为arrayList要移动大量数据。
思路:此题是读取数据流并进行查询操作,用ArrayList更合适。
!ArrayList常见的方法
array.add(object);//添加一个元素
array.get(index);//取出集合中的元素,在get方法的参数中,写入索引。
array.size();//返回集合的长度,也就是存储元素的个数。
array.remove();//移除一个元素
代码:
import java.util.*; public class Solution { Listlist=new ArrayList (); public void Insert(Integer num) { list.add(Double.valueOf(num));//返回给定参数num的原生Double对象值 Collections.sort(list);//ArrayList的排序 } public Double GetMedian() { double res=0; int len=list.size(); if(len==1)res=list.get(0); else if(len%2==0){ int tmp=len/2; res=(list.get(tmp)+list.get(tmp-1))/2.0; }else{ int tmp=len/2; res=list.get(tmp); } return res; } }
方法2:大顶堆小顶堆