本题的第一个难点,要自己构造一个类(因为个人构造类的题目做的较少) 属性: 数组的长度int 数组的数据结构 List
保证原数组是一个有序数组,我使用了二分查找插入新元素。(类似于35.搜索插入位置) ① 当前数据结构没有元素时,直接插入数据结构尾部 ② 当要插入的元素大于数据结构中最后一个元素时,直接插入数据结构的尾部。 ③ 其他的元素按照二分查找的方法插入数据结构中,List 的 add(position, num)方法。
没学会大小堆。。。。先用我的垃圾方法得了
classMedianFinder{int size;List<Integer> lis;publicMedianFinder(){
size =0;
lis =newArrayList<>();}// 要保持原数组的有序插入// 二分法查找插入publicvoidaddNum(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;}elseif(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("*");}publicdoublefindMedian(){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;}}