`

从10000000个元素里面找出最大的前100个

 
阅读更多

           如题,从最大的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();
		}
	}
}

 

0
1
分享到:
评论

相关推荐

    典型的Top K算法 找出一个数组里面前K个最大数.doc

    典型的Top K算法 找出一个数组里面前K个最大数 Top K算法是解决一个经典的问题,即在一个大规模的数组中找到前K个最大数的问题。在这个问题中,我们需要在一个数组中找到前K个最大数,例如在搜索引擎中,需要找出最...

    背包问题,第K小元素等算法代码及描述

    在解决这类问题时,动态规划是一种常用的方法,通过构造一个二维状态数组,可以有效地找出最优解。在`背包问题.cpp`文件中,你可以找到实现这个算法的具体代码。 接着,我们讨论“第K小元素”问题。这是一个在数组...

    C语言找出数组中的特定元素的算法解析

    问题描述:一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。  思路:如果能用两个辅助数组,那么相对来说...

    常见面试算法题目

    3. 1~100共一百个自然数,放入一个只有99个元素的数组中,找出没有被放入数组的这个数; 4. 字符串的反转输出 5. 截取字符串, 如果该字符串是“abc我的”,当截取的字节数是3时候就是"abc',如果是4,依然是 abc,也...

    python实现n个数中选出m个数的方法

    标题中的“python实现n个数中选出m个数的方法”是指在Python编程环境中,如何从一个包含n个元素的集合中选择出m个元素的所有可能组合。这个问题在计算机科学和算法设计中通常被称为组合问题,它涉及到组合数学和回溯...

    java 输入一个数字组成的数组(输出该数组的最大值和最小值)

    3. 找出最大值和最小值:遍历数组是寻找最大值和最小值的常用方法。这里定义了两个静态方法`getMax()`和`getMin()`,它们分别接收整型数组作为参数,初始化一个临时变量为`Integer.MIN_VALUE`,然后遍历数组,比较每...

    在java中获取List集合中最大的日期时间操作

    在 Java 中获取 List 集合中最大的日期时间操作是一个常见的需求,特别是在处理日期类型的数据时。下面将详细介绍如何获取 List 集合中最大的日期时间操作。 获取 List 集合中最大的日期时间操作 Java 中提供了...

    c语言实验报告全(附代码)

    有一个n×m的矩阵,要求找出其中值最大的那个元素所在的行号和列号,以及该元素之值。 林大OJ (951题) Input 输入数据有多组,每组第1行有2个正整数m和n(2 ,n ),接下来有m行n列的数据a(ij),(1 (ij)&lt;=100); ...

    java求数组最大值和最小数示例分享

    在Java编程语言中,处理数组是常见的操作,其中包括找出数组中的最大值和最小值。这两个概念在数据分析、算法实现和各种计算场景中都非常关键。在本文中,我们将深入探讨如何在Java中找到数组的最大值和最小值,并...

    蓝桥杯C/C++省赛:排它平方数

    具有这样特点的6位数还有一个,请你找出它! 再归纳一下筛选要求: 1. 6位正整数 2. 每个数位上的数字不同 3. 其平方数的每个数位不含原数字的任何组成数位 答案是一个6位的正整数。 思路分析 暴力解决: 从最小的...

    软件界面设计工具_3款合集

    由于它里面的控件同样可以设置下一步的响应动作,所以从总体上来看,众多原型就像一个树状结构,而其中的父节点就是图二中的设置窗体了。这种结构具有一个很大的好处:无论你完成了多个界面的原型,只需要它们之间有...

    java选择排序 数组选择排序

    选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。这种排序方式就像我们在日常生活中挑选东西一样...

    List 里面各种关于Linq用法总结

    这些方法用于统计列表中的元素数量、求和、计算平均值、找出最大值和最小值。 ```csharp int count = numbers.Count(); double sum = numbers.Sum(); double average = numbers.Average(); int max = numbers....

    各种内部排序方法及其比较实验报告

    堆排序表堆的这颗完全二叉树的根节点的值是最大(或最小)的,因此将一个无序序列调整为一个堆,就可以找出这个序列的最大(最小)值,然后将找出的这个值交换到序列的最后(或最前),这样有序序列关键字加 1,无序...

    binpack25_0-1背包问题_源码.zip

    这个问题源自于这样一个场景:你有一个容量有限的背包,里面装有不同价值和重量的物品,目标是选择一部分物品使得它们的总价值最大,但总重量不能超过背包的容量。这个问题的关键在于每个物品只能取或不取,即要么...

    十道海量数据处理面试题与十个方法大总结

    有一个1G大小的文件,里面每一行是一个词,内存限制大小是1M。返回频数最高的100个词。** - **背景**: 处理大规模文本文件,找出出现频率最高的词汇。 - **解决方案**: - 将文件分割成较小的子文件,每行词使用...

    排序算法(主要讲述了数据结构里面常用的一些算法)

    交换排序,也称为选择排序,它的核心思想是每一轮遍历找出当前未排序部分的最大(或最小)元素,并将其放到正确的位置。交换排序同样具有O(n^2)的时间复杂度,但由于其交换操作比冒泡排序更少,所以在某些情况下可能...

    最大值

    当我们说“找到最大值”时,我们通常指的是在这样的集合中找出数值最大的那个元素。 在Shell编程中,这可以通过各种命令和工具实现。Shell是Unix和类Unix操作系统(如Linux和macOS)的命令行界面,它允许用户通过...

    Leetcode的ac是什么意思-LeetCode:练习LeetCode

    这题是给你一个整数的数组,然后给你一个目标值,让你从这个数组中找出两个数相加等于这个目标值的数组索引值(不能是同一个元素)。 第一种解题思路就是两个for循环,第二个for循环的起始变量比第一个for循环起始...

    javascript入门笔记

    从弹框中录入一个数字表示考试成绩(score) 如果 成绩为 100 分 ,提示 :满分 如果 成绩 &gt;= 90 分 ,提示 :优 如果 成绩 &gt;= 80 分 ,提示 :良 如果 成绩 &gt;= 60 分 ,提示 :及格 否则 :提示 不及格 2、函数...

Global site tag (gtag.js) - Google Analytics