295. 数据流的中位数

二分法实现

    • [295. 数据流的中位数](#295. 数据流的中位数)

295. 数据流的中位数

  • 本题的第一个难点,要自己构造一个类(因为个人构造类的题目做的较少)
    属性: 数组的长度int 数组的数据结构 List
  • 保证原数组是一个有序数组,我使用了二分查找插入新元素。(类似于35.搜索插入位置)
    ① 当前数据结构没有元素时,直接插入数据结构尾部
    ② 当要插入的元素大于数据结构中最后一个元素时,直接插入数据结构的尾部。
    ③ 其他的元素按照二分查找的方法插入数据结构中,List 的 add(position, num)方法。
  • 没学会大小堆。。。。先用我的垃圾方法得了
java 复制代码
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;
    }
}
相关推荐
gadiaola16 分钟前
【计算机网络面试篇】HTTP
java·后端·网络协议·计算机网络·http·面试
S90378459718 分钟前
为什么取模在除数等于2^n的时候可以用按位与替代?
java·tomcat·计算机外设·hibernate
7***37451 小时前
Java设计模式之工厂
java·开发语言·设计模式
程序员小白条2 小时前
你面试时吹过最大的牛是什么?
java·开发语言·数据库·阿里云·面试·职场和发展·毕设
折翅嘀皇虫2 小时前
fastdds.type_propagation 详解
java·服务器·前端
小年糕是糕手2 小时前
【C++】类和对象(二) -- 构造函数、析构函数
java·c语言·开发语言·数据结构·c++·算法·leetcode
豐儀麟阁贵2 小时前
8.2异常的抛出与捕捉
java·开发语言·python
老华带你飞2 小时前
社区养老保障|智慧养老|基于springboot+小程序社区养老保障系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·社区养老保障
码龄3年 审核中2 小时前
Linux record 03
java·linux·运维