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;
    }
}
相关推荐
程序员清风17 小时前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
皮皮林55118 小时前
利用闲置 Mac 从零部署 OpenClaw 教程 !
java
华仔啊1 天前
挖到了 1 个 Java 小特性:var,用完就回不去了
java·后端
SimonKing1 天前
SpringBoot整合秘笈:让Mybatis用上Calcite,实现统一SQL查询
java·后端·程序员
日月云棠2 天前
各版本JDK对比:JDK 25 特性详解
java
用户8307196840822 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
JavaGuide2 天前
Claude Opus 4.6 真的用不起了!我换成了国产 M2.5,实测真香!!
java·spring·ai·claude code
IT探险家2 天前
Java 基本数据类型:8 种原始类型 + 数组 + 6 个新手必踩的坑
java
花花无缺2 天前
搞懂new 关键字(构造函数)和 .builder() 模式(建造者模式)创建对象
java
用户908324602732 天前
Spring Boot + MyBatis-Plus 多租户实战:从数据隔离到权限控制的完整方案
java·后端