有一串无序数字,如何在只遍历一次的情况下用数组存多个不同的较小值
(越准确越好,之前写的误差都太大了)
把N个数据放在磁盘上,此外,在内存开辟一个可以容纳M个数据的最小堆。每次从磁盘上读取一个数据,若最小堆未满,则直接放入最小堆中,调整堆使其符合最小堆的性质;若最小堆已满,则将这个数与最小堆根结点上的数值进行比较,若比根结点的数值大,则替换掉根结点上的值,然后重新调整最小堆使其符合最小堆的性质。遍历完M个数据后,这个容量为N的最小堆里面存放的就是前N个最大值了。求最小值跟这个类似
你先进行遍历,每遍历一次就将遍历的值通过二分查找插入到数组指定位置
你说的不同最小值的定义是什么?是指多个谷底的值,但每个谷底的值不同么?问题问得不太清楚明确。
先设置一个数据,用于存储几个不同的较小值,可以是升序或者降序,刚开始为空
然后循环遍历无序的数据,然后和之前设置的数据内的数做比较
如果需要的较小值数量较少,比如说是3,那么时间复杂度为o(3n)
google搜索“topk算法”
比如:https://blog.csdn.net/u010282707/article/details/33330981
标准的topk是找最大值,但是没关系,最大值和最小值其实是一回事,只是比较规则颠倒下就可以了。
必须要有一个参考值来确定是否为较小,假设这个参考值为int temp;将数组里面的数包括temp从大到小排序,这时候temp后面的元素为较小的,前面的为较大的