问题描述:这里写链接内容
分析:这道题比较简单,重点在于如何高效插入数据。这里采用的是二分法,相当于插入排序。
代码如下:
class MedianFinder {
List<Integer> numlist = new ArrayList<>();
// Adds a number into the data structure.
public void addNum(int num) {
int left = 0;
int right = numlist.size()-1;
while(left<=right){
int mid = (left+right)/2;
int val = numlist.get(mid);
if(val == num){
numlist.add(mid,num);
return;
}else if(val < num){
if(mid+1 < numlist.size() && numlist.get(mid+1)> num){
numlist.add(mid+1,num);
return;
}
left = mid+1;
}else{
right = mid-1;
}
}
numlist.add(left,num);
}
// Returns the median of current data stream
public double findMedian() {
int size = numlist.size();
if(size%2 == 1){//odd
return numlist.get((size-1)/2);
}
return (numlist.get(size/2-1)+numlist.get(size/2))/2.0;
}
};
// Your MedianFinder object will be instantiated and called as such:
// MedianFinder mf = new MedianFinder();
// mf.addNum(1);
// mf.findMedian();