数据流中的中位数

数据流中的中位数

http://www.nowcoder.com/questionTerminal/9be0172896bd43948f8a32fb954e1be1

看大家都是用了优先队列,我一开始没有想到没用了快速排序中partition的思想,也能完成中位数的求解

import java.util.ArrayList;
import java.util.List;
public class Solution {

    private final List<Integer> list = new ArrayList<>();

    public void Insert(Integer num) {
        list.add(num);
    }

    public Double GetMedian() {
        return  partition(list,0,list.size()-1);

    }



    private double partition(List<Integer> list, int lo, int hi) {
        int pivot = list.get(lo);
        int i = lo,j = hi;
        while(i<j){
            while(i<j&&list.get(j)>pivot){
                j--;
            }
            list.set(i,list.get(j));

            while(i<j&&list.get(i)<pivot){
                i++;
            }
            list.set(j,list.get(i));
        }
        list.set(i,pivot);
        if (i<(list.size()>>1)){
            return partition(list,i+1,hi);
        }else if(i>(list.size()>>1)){
            return partition(list,lo,i-1);
        }else {
            if((list.size()%2==1)){
                return list.get(j);
            }else{
                return (list.get(j)+list.get(j-1))*0.5;
            }
        }
    }


}
全部评论

相关推荐

程序员花海_:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
_mos_:要不是看评论区我都不知道你要找的是数分
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务