面试冲刺:14---10G个整数,乱序排序,要求找出中位数(内存限制2G)

一、题目描述

  • 现在有一个文件,文件中有10G个整数,这些整数都是乱序排序的,现在要求找出中位数(内存限制为2G)

二、分析

  • 一般遇到这种题目,答案都是不唯一的,看你自己的设计思路以及不同设计方法之间的性能差异

三、方法1

  • 第一步:假设每个整数都是8字节的(64bit)
  • 第二步:那么2G的内存可以存放256M个64bit的整数
  • 第三步:我们可以将 64bit 的整数空间平均分成 256M 个取值范围,用 2G 的内存对每个取值范围内出现整数个数进行统计。这样遍历一边 10G 整数后,我们便知道中数在那个范围内出现,以及这个范围内总共出现了多少个整数
  • 第四步:如果中数所在范围出现的整数比较少,我们就可以对这个范围内的整数进行排序,找到中数。如果这个范围还可以采用同样的方法将此范围再次分成多个更小的范围(256M-228,所以最多需要3 次就可以将此范围缩小到 1,也就找到了中数)

你可能感兴趣的:(面试冲刺)