# coding=utf-8 # O(nlogk)的算法, 适合海量数据 # 利用一个k容量的容器存放数组, 构造最大堆, 当下一个数据大于最大数, 跳过, # 小于最大数, 则进入容器替换之前的最大数 from offer import build, adjust def getk(data, k): if data is None or len(data) < k or k < 0: return [] result = data[0:k] build(result, k) for item in data[k:]: if item < result[0]: result[0] = item adjust(result, 0, k) pass pass return result pass def main(): data = [4, 5, 1, 6, 7, 2, 8] print getk(data, 3) pass if __name__ == '__main__': main() pass