#22. 求中位数【二】

内存限制:512 MiB 时间限制:900 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: finedev

题目描述

中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数(或最中间两个数据的平均数)。

给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数)。

输入格式

该程序包含一组测试数据,是一个包含1千万个整数的二进制文件,总计大约有10万个不同的整数。

输出格式

输出中位数。

数据范围与提示

使用如下的代码将二进制文件读取为整数数组,耗时约为150毫秒~180毫秒。

private static int[] readIntArray() {
        int[] array = new int[10000000];
        try (ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(System.in))) {
            for (int i = 0; i < 10000000; i ++) {
                array[i] = in.readInt();
            }
        } catch (Exception ignore) {
            
        }
        return array;
    }

使用如下代码计算中位数,耗时约为2000毫秒

private static int getMedian(int[] array) {
        int middle = 0;
        int size = array.length;

        Arrays.sort(array);
        if(size % 2 == 0){
            middle = (array[size/2-1]+array[size/2])/2;
        }else{
            int inx = size/2;
            middle = array[inx];
        }
        return middle;
    }