博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
careercup-高等难度 18.6
阅读量:7207 次
发布时间:2019-06-29

本文共 352 字,大约阅读时间需要 1 分钟。

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

解法:

方法1:排序

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

方法2:大顶堆

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

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

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

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

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

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

 

转载地址:http://dcoum.baihongyu.com/

你可能感兴趣的文章
高通公司 MSM8K GPT异常原因分析无法开机的问题
查看>>
Android 升级下载 它们的定义Updates 兼容版本
查看>>
webstorm 10.0.4 注册码
查看>>
跨平台开源通讯组件elastic communication
查看>>
js dom学习
查看>>
Project Euler 98:Anagramic squares 重排平方数
查看>>
懒与馋的平衡:餐饮O2O市场广阔,发展不易
查看>>
Ubuntu下安装中文输入法
查看>>
(原)使用vectot的.end()报错:iterators incompatible
查看>>
通用软部件(通用管理信息系统)的研究与生产
查看>>
MFC中模态对话框和非模态对话框的差别
查看>>
数据挖掘算法 1 ID3(python)
查看>>
FPGA机器学习之学习的方向
查看>>
WebBrowser控件使用相关
查看>>
【Android】1.1 开发环境安装和配置
查看>>
站点公司亚马逊砸了10亿也没能做成智能手机,技术是须要沉淀和积累的
查看>>
[数据库]SQL Server 用户NT AUTHORITY\IUSR 登录失败
查看>>
轻松学会多线程(四)——synchronized同步keyword知多少
查看>>
Apache Kylin 部署之不完全指南
查看>>
php中将SimpleXMLElement Object数组转化为普通数组
查看>>