题解 | #数据流中的中位数#

数据流中的中位数

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

  1. python 解法,全部列表里塞,取的时候sort一把。插入的时候时间复杂度为0,取的时候为logN,相比大小顶堆也不错嘛,哈哈。

    # -*- coding:utf-8 -*-
    class Solution:
     def __init__(self):
         self.list_num = []
         self.count = 0
    
     def Insert(self, num):
         self.list_num.append(num)
         self.count += 1
         # write code here
     def GetMedian(self):
         self.list_num.sort()
         if self.count%2:
             return self.list_num[int(self.count/2)]
         else:
             return (self.list_num[int(self.count/2)-1]+self.list_num[int(self.count/2)])/2
  2. java解法: 大顶堆存小数,小顶堆存大数,需要的时候两个堆取个顶就ok

import java.util.PriorityQueue;
import java.util.Comparator;

public class Solution {
    private PriorityQueue<Integer> minq = new PriorityQueue<>();
    private PriorityQueue<Integer> maxq = new PriorityQueue<>(new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2.compareTo(o1);
    }
});
    private int count = 0;
    public void Insert(Integer num) {
        count ++;
        if(count%2==0){
            minq.offer(num);
            num = minq.poll();
            maxq.offer(num);
        }else{
            maxq.offer(num);
            num = maxq.poll();
            minq.offer(num);
        }
    }

    public Double GetMedian() {
        if(count%2!=0){
            return minq.peek()/1.0;
        }else{
            return (minq.peek()+maxq.peek())/2.0;
        }
    }


}
全部评论

相关推荐

牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
想干测开的tomca...:这份简历是“大一新生硬凹资深后端”的典型反面教材,槽点离谱到能让面试官直接笑出声: ### 1. 「年龄+入学时间」和项目复杂度完全脱节,可信度直接归0 你2024年7月才入学(现在刚读了1年多),19岁的大一新生,能把Vue3+Spring Boot+ShardingSphere+K8s+AI这些技术全塞进两个项目里?别说实际开发,光把这些技术的文档看完都得半年——这不是“能力强”,是“把招聘JD里的技术词全抄过来造假”,明摆着没碰过实际代码
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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