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;
    }
}
相关推荐
水痕011 小时前
gin结合minio来做文件存储
java·eureka·gin
寒士obj1 小时前
Spring事物
java·spring
柯南二号2 小时前
【Java后端】Spring Boot 集成 MyBatis-Plus 全攻略
java·spring boot·mybatis
桦说编程9 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
lifallen9 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研9 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
没有bug.的程序员10 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋10 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
阿华的代码王国11 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Zyy~11 小时前
《设计模式》装饰模式
java·设计模式