面试题以及解答
题目1:假设淘宝一天有5亿条成交数据,求出销量最高的100个商品并给出算法的时间复杂度。
这个问题的复杂度在于数据量太大。
我有几种解决方案
1:创建大小为100的数组,并初始化(取5亿的前100条,然后排序)。遍历5亿条数据,如果有数据大于数组的最小值,就替换数据里的元素。
2:创建大小为100的最小堆,并初始化(取5亿的前100条,建立最小堆)。遍历5亿条数据,如果有大于最小值,就用当前值替换最小值,重建堆。
3:将5亿条数据分为100份,每份取前一百条;然后从上一步的结果里取前100条(采用归并、分而治之思想)
4:遍历一遍,找到最大值、最小值;然后取阀值m = (max + min)/2;大于阀值的,记录下来(最多记录100条记录,存一个数量n)
如果n>500,则取阀值为(max + m)/2;如果100<n<500,则选取排序算法,找到前一百即可;若n<100,则取阀值为(m + min)/2
5:抽样调查法:随机从中取出10组,每组5000条数据;取其前100条;