zoukankan      html  css  js  c++  java
  • careercup-高等难度 18.6

    18.6 设计一个算法,给定10亿个数字,找出最小的100万个数字。假定计算机内存足以容纳全部10亿个数字。

    解法:

    方法1:排序

    按升序排序所有的元素,然后取出前100万个数,时间复杂度为O(nlog(n))

    方法2:大顶堆

    我们可以使用大顶堆来解题。首先,为前100万个数字创建一个大顶堆

    然后,遍历整个数列,将每个元素插入大顶堆,并删除最大的元素。

    遍历结束后,我们将得到一个堆,刚好包含最小的100万个数字。这个算法的时间复杂度为O(nlog(m)),其中m为待查找数值的数量。

    方法3:选择排序算法(假如你可以改变原始数组)

    在计算机科学中,选择排序是个很有名的算法,可以在线性时间内找到数组中第i个最小(或最大)元素。

    如果这些元素各不相同,则可以在预期的O(n)时间内找到第i个最小的元素。

  • 相关阅读:
    MongoDB中常用的find
    MongoDB文档的增删改操作
    我的notepad++
    MongoDB入门知识
    Python基础5-常用模块
    Python基础4
    Python基础3(2017-07-20)
    Python基础2(2017-07-18)
    Python基础1(2017-07-16)
    Python简介(2017-07-16)
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4362389.html
Copyright © 2011-2022 走看看