offer30--最小的k个数

来源:互联网 发布:dnf安图恩数据异常 编辑:程序博客网 时间:2024/06/07 18:15

 

# coding=utf-8# O(nlogk)的算法, 适合海量数据# 利用一个k容量的容器存放数组, 构造最大堆, 当下一个数据大于最大数, 跳过,#  小于最大数, 则进入容器替换之前的最大数from offer import build, adjustdef 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    passdef main():    data = [4, 5, 1, 6, 7, 2, 8]    print getk(data, 3)    passif __name__ == '__main__':    main()    pass

原创粉丝点击