本文主要是介绍295. 数据流的中位数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
二分法实现
- 295. 数据流的中位数
295. 数据流的中位数
- 本题的第一个难点,要自己构造一个类(因为个人构造类的题目做的较少)
属性: 数组的长度int 数组的数据结构 List - 保证原数组是一个有序数组,我使用了二分查找插入新元素。(类似于35.搜索插入位置)
① 当前数据结构没有元素时,直接插入数据结构尾部
② 当要插入的元素大于数据结构中最后一个元素时,直接插入数据结构的尾部。
③ 其他的元素按照二分查找的方法插入数据结构中,List 的 add(position, num)方法。 - 没学会大小堆。。。。先用我的垃圾方法得了
class MedianFinder {int size;List<Integer> lis;public MedianFinder() {size = 0;lis = new ArrayList<>();}// 要保持原数组的有序插入// 二分法查找插入public void addNum(int num) {int left = 0;int right = size-1;if(size == 0){lis.add(num);size++;return;}if( num > lis.get(right)){lis.add(num);size++;return;} int middle = 0;while(left <= right){middle = left + (right - left)/2;if(lis.get(middle) > num){right = middle - 1;}else if(lis.get(middle) < num){left = middle + 1;}else{lis.add(middle, num);size++;return;}}lis.add(left, num);size++;// 用于打印测试// for(int tmp: lis){// System.out.println(tmp);// }// System.out.println("*");}public double findMedian() {double median = 0.0;if(size % 2 == 1){median = lis.get(size/2);}else{median = (lis.get((size-1)/2)+lis.get(size/2))/2.0;}return median;}
}
这篇关于295. 数据流的中位数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!