如题,从最大的10000000个元素里面找出最大的前100个,下面是我的代码实现:
import java.util.Comparator; import java.util.PriorityQueue; import java.util.Random; import java.util.logging.Logger; public class FixSizedPriorityQueue<E extends Comparable> { private final static Logger logger = Logger.getLogger(FixSizedPriorityQueue.class.getName()); private PriorityQueue<E> queue; private int maxSize; // 堆的最大容量 public FixSizedPriorityQueue(int maxSize) { if (maxSize <= 0) throw new IllegalArgumentException(); this.maxSize = maxSize; this.queue = new PriorityQueue(maxSize, new Comparator<E>() { @Override public int compare(E o1, E o2) { return o1.compareTo(o2); } }); } public void add(E e) { if (queue.size() < maxSize) { queue.add(e); } else { E peek = queue.peek(); if (e.compareTo(peek) > 0) { queue.poll(); queue.add(e); } } } public PriorityQueue<E> getQueue(){ return queue; } public static void main(String[] args) { final int length = 10000000; final int maxSize = 100; FixSizedPriorityQueue<Integer> fixedQueue = new FixSizedPriorityQueue<Integer>(maxSize); Random random = new Random(); for(int i =1; i < length; i++){ fixedQueue.add(random.nextInt(i)); } PriorityQueue<Integer> queue = fixedQueue.getQueue(); Object obj = queue.poll(); while(obj != null){ logger.info(obj.toString()); obj = queue.poll(); } } }
相关推荐
典型的Top K算法 找出一个数组里面前K个最大数 Top K算法是解决一个经典的问题,即在一个大规模的数组中找到前K个最大数的问题。在这个问题中,我们需要在一个数组中找到前K个最大数,例如在搜索引擎中,需要找出最...
在解决这类问题时,动态规划是一种常用的方法,通过构造一个二维状态数组,可以有效地找出最优解。在`背包问题.cpp`文件中,你可以找到实现这个算法的具体代码。 接着,我们讨论“第K小元素”问题。这是一个在数组...
问题描述:一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。 思路:如果能用两个辅助数组,那么相对来说...
3. 1~100共一百个自然数,放入一个只有99个元素的数组中,找出没有被放入数组的这个数; 4. 字符串的反转输出 5. 截取字符串, 如果该字符串是“abc我的”,当截取的字节数是3时候就是"abc',如果是4,依然是 abc,也...
标题中的“python实现n个数中选出m个数的方法”是指在Python编程环境中,如何从一个包含n个元素的集合中选择出m个元素的所有可能组合。这个问题在计算机科学和算法设计中通常被称为组合问题,它涉及到组合数学和回溯...
3. 找出最大值和最小值:遍历数组是寻找最大值和最小值的常用方法。这里定义了两个静态方法`getMax()`和`getMin()`,它们分别接收整型数组作为参数,初始化一个临时变量为`Integer.MIN_VALUE`,然后遍历数组,比较每...
在 Java 中获取 List 集合中最大的日期时间操作是一个常见的需求,特别是在处理日期类型的数据时。下面将详细介绍如何获取 List 集合中最大的日期时间操作。 获取 List 集合中最大的日期时间操作 Java 中提供了...
有一个n×m的矩阵,要求找出其中值最大的那个元素所在的行号和列号,以及该元素之值。 林大OJ (951题) Input 输入数据有多组,每组第1行有2个正整数m和n(2 ,n ),接下来有m行n列的数据a(ij),(1 (ij)<=100); ...
在Java编程语言中,处理数组是常见的操作,其中包括找出数组中的最大值和最小值。这两个概念在数据分析、算法实现和各种计算场景中都非常关键。在本文中,我们将深入探讨如何在Java中找到数组的最大值和最小值,并...
具有这样特点的6位数还有一个,请你找出它! 再归纳一下筛选要求: 1. 6位正整数 2. 每个数位上的数字不同 3. 其平方数的每个数位不含原数字的任何组成数位 答案是一个6位的正整数。 思路分析 暴力解决: 从最小的...
由于它里面的控件同样可以设置下一步的响应动作,所以从总体上来看,众多原型就像一个树状结构,而其中的父节点就是图二中的设置窗体了。这种结构具有一个很大的好处:无论你完成了多个界面的原型,只需要它们之间有...
选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。这种排序方式就像我们在日常生活中挑选东西一样...
这些方法用于统计列表中的元素数量、求和、计算平均值、找出最大值和最小值。 ```csharp int count = numbers.Count(); double sum = numbers.Sum(); double average = numbers.Average(); int max = numbers....
堆排序表堆的这颗完全二叉树的根节点的值是最大(或最小)的,因此将一个无序序列调整为一个堆,就可以找出这个序列的最大(最小)值,然后将找出的这个值交换到序列的最后(或最前),这样有序序列关键字加 1,无序...
这个问题源自于这样一个场景:你有一个容量有限的背包,里面装有不同价值和重量的物品,目标是选择一部分物品使得它们的总价值最大,但总重量不能超过背包的容量。这个问题的关键在于每个物品只能取或不取,即要么...
有一个1G大小的文件,里面每一行是一个词,内存限制大小是1M。返回频数最高的100个词。** - **背景**: 处理大规模文本文件,找出出现频率最高的词汇。 - **解决方案**: - 将文件分割成较小的子文件,每行词使用...
交换排序,也称为选择排序,它的核心思想是每一轮遍历找出当前未排序部分的最大(或最小)元素,并将其放到正确的位置。交换排序同样具有O(n^2)的时间复杂度,但由于其交换操作比冒泡排序更少,所以在某些情况下可能...
当我们说“找到最大值”时,我们通常指的是在这样的集合中找出数值最大的那个元素。 在Shell编程中,这可以通过各种命令和工具实现。Shell是Unix和类Unix操作系统(如Linux和macOS)的命令行界面,它允许用户通过...
这题是给你一个整数的数组,然后给你一个目标值,让你从这个数组中找出两个数相加等于这个目标值的数组索引值(不能是同一个元素)。 第一种解题思路就是两个for循环,第二个for循环的起始变量比第一个for循环起始...
从弹框中录入一个数字表示考试成绩(score) 如果 成绩为 100 分 ,提示 :满分 如果 成绩 >= 90 分 ,提示 :优 如果 成绩 >= 80 分 ,提示 :良 如果 成绩 >= 60 分 ,提示 :及格 否则 :提示 不及格 2、函数...