剑指offer系列之六十二:数据流中的中位数

简介:

题目描述

如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。

根据题目的意思,就是对数据流中的数据进行排序然后得到其中位数。要解决的关键问题是如何在读入数据的时候就对数据进行排序。实际上可以看成是插入排序算法的应用,可以维持一个List集合,保证每次读入数据集合中的数据都是排序的。基本思路是:从集合的第一个元素开始,依次比较与新读入的元素的大小关系,从而把新读入的数据插入到合适的位置。可以看出,这实际上就是插入排序的思想了。下面是具体实现的代码(已被牛客AC):

import java.util.ArrayList;
public class Solution {

    ArrayList<Integer> list = new ArrayList<Integer>();

    public void Insert(Integer num) {
        int index = 0;
        int size = list.size();
        while (index < size) {
            if (num <= list.get(index))
                break;
            index++;
        }
        list.add(index, num);
    }

    public Double GetMedian() {
        int size = list.size();
        if ((size & 1) == 0)
            return (double) ((list.get(size / 2) + list.get(size / 2 - 1)) / 2.0);
        return (double)list.get(size / 2) * 1.0;
    }


}
AI 代码解读
目录
打赏
0
0
0
1
85
分享
相关文章
【动态规划】【状态压缩】【C++算法】1815 得到新鲜甜甜圈的最多组数
【动态规划】【状态压缩】【C++算法】1815 得到新鲜甜甜圈的最多组数
剑指offer(C++)-JZ41:数据流中的中位数(算法-排序)
剑指offer(C++)-JZ41:数据流中的中位数(算法-排序)
105 0
剑指offer(C++)-JZ41:数据流中的中位数(算法-排序)
【408数据结构与算法】—数组和特殊矩阵的压缩存储(二十五)
【408数据结构与算法】—数组和特殊矩阵的压缩存储(二十五)
剑指offer 42. 数据流中的中位数
剑指offer 42. 数据流中的中位数
50 0
【每日挠头算法题】LeetCode 1337. 矩阵中战斗力最弱的 K 行 —— 二分 + 排序 / 堆
【每日挠头算法题】LeetCode 1337. 矩阵中战斗力最弱的 K 行 —— 二分 + 排序 / 堆
133 0
【每日挠头算法题】LeetCode 1337. 矩阵中战斗力最弱的 K 行 —— 二分 + 排序 / 堆
日拱算法:环形数组是否存在循环
存在一个不含 0 的 环形 数组 nums ,每个 nums[i] 都表示位于下标 i 的角色应该向前或向后移动的下标个数: 如果 nums[i] 是正数,向前(下标递增方向)移动 |nums[i]| 步 如果 nums[i] 是负数,向后(下标递减方向)移动 |nums[i]| 步
[java刷算法]牛客—剑指offer动态规划,位移比较,负乘方转换
✨今日三剑 JZ14 剪绳子 JZ15 二进制中1的个数 JZ16 数值的整数次方
[java刷算法]牛客—剑指offer动态规划,位移比较,负乘方转换
算法每日一题——第四天——将一维数组转化为二维数组
算法每日一题——第四天——将一维数组转化为二维数组
算法每日一题——第四天——将一维数组转化为二维数组
再学一道算法题: 两个有序序列的中位数
再学一道算法题: 两个有序序列的中位数
再学一道算法题: 两个有序序列的中位数
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等