利用有序队列寻找最大的K个数
* @(#)Kmax.java
*
* Kmax application
*
* @author
* @version 1.00 2010/2/19
*/
import static java.lang.System.out;
import java.util.Comparator;
import java.util.PriorityQueue;
class MyComparator implements Comparator {
public int compare(Object a, Object b) {
return ((Long)a).compareTo((Long)b);
}
}
public class Kmax {
private long []n;
private int maxNum = 20;
private int k = 5;
private final static int BOUND = 1000;
private void generateNumbers() {
n = new long[maxNum];
for(int i = 0; i < maxNum; i++) {
n[i] = Math.round(Math.random() * BOUND);
out.println(n[i]);
}
}
private void selectKmax() {
PriorityQueue pq = new PriorityQueue(k, new MyComparator());
for(int i = 0; i < k; i++) {
pq.offer(n[i]);
}
for(int i = k; i < maxNum; i++) {
if(n[i] > (Long)pq.peek()) {
pq.poll();
pq.offer(n[i]);
}
}
out.println("-----------------------");
while(pq.size() > 0) {
out.println((Long)pq.poll());
}
}
public static void main(String[] args) {
Kmax kmax = new Kmax();
kmax.generateNumbers();//产生maxNum个随机整数
kmax.selectKmax();//从中选出k个最大的数,并输出
out.println("Complete!");
}
}
利用有序队列寻找最大的K个数相关推荐
- 程序员编程艺术:第三章、寻找最小的k个数
程序员编程艺术:第三章.寻找最小的k个数 作者:July. 时间:二零一一年四月二十八日. 致谢:litaoye, strugglever,yansha,luuillu,Sorehead,及狂想曲创作 ...
- 编程之美2.5 寻找最大的K个数
在一个数组中寻找最大的K个数,我们首先说一种非常简单的方法,利用快速排序中的分割算法,即我们经常看见的partition.这个函数会返回一个 int 类型的值,这个值代表的是前一半数字和后一半数字的分 ...
- 编程之美-寻找最大的k个数
[问题描述] 有很多无序的数,我们姑且假定它们各不相等,怎么选出其中最大的若干个数呢? 方法一:时间复杂度min(O(nlogn), O(nk)) idea 1: 先用快速排序或者堆排序进行排序,然后 ...
- 海量数据中,寻找最小的k个数。
维护k个元素的最大堆,即用容量为k的最大堆存储最小的k个数,k1设为大顶堆中最大元素.遍历一次数列,n,每次遍历一个元素x,与堆顶元素比 较,x<kmax,更新堆,否则不更新堆. 1 // 海量 ...
- 算法题解之寻找最大的k个数
一般看到寻找最大的k个数的题目,我们第一想法便是先使用降序排序,然后取前k个即可,这种方法确实是比较常规的,一般情况下也是可行的,但是如果数据十分庞大,则会影响使得创建的数组内存溢出等等.因此,需要对 ...
- 寻找最大的k个数问题
这是编程之美书第2.5节的一道题目. 各种解法: 解法一,用nlgn复杂度的排序算法对数组进行从大到小排序,取前K个.但这方法做了两件不必要做的事:它对想得到的K个数进行了排序,对不想得到的n-K个数 ...
- 寻找最大的K个数(下)
接着昨天的写,里面的代码包含昨天的 1 #include <iostream> 2 using namespace std; 3 #define N 50 4 5 //初始化数组 6 in ...
- Java实现寻找最小的k个数
1 问题描述 有n个整数,请找出其中最小的k个数,要求时间复杂度尽可能低. 2 解决方案 2.1 全部排序法 先对这n个整数进行快速排序,在依次输出前k个数. package com.liuzhen. ...
- 寻找最大的K个数(上)
这是一道很经典的题目,有太多方法了,今天写了两种方法,分别是快排和堆排序 1 #include <iostream> 2 using namespace std; 3 #define N ...
- java第k大的数字,JAVA中寻找最大的K个数解法
这个题拿到之后首先会想到排序,排好序之后在选取选取最大的K个数.排序选择快速排序是个比较好的选择. 好了,让我们来进行第一个解法:快速排序 代码如下 复制代码代码如下: public static v ...
最新文章
- 逃离 AI 赛道的投资人:做局失利、破局无力
- SVN本地代码未提交而被覆盖
- MySQL错误1264和1366_Mysql错误1366 - Incorrect integer value解决方法
- MySQL purge 线程
- Redis数据结构之有序集合
- 阿里编码规约扫描eclipse插件安装使用
- 为什么要与下属建立良好的人际关系?
- 25 张图,一万字,拆解 Linux 网络包发送过程
- (附源码)spring boot校园二手交易平台 毕业设计 191637
- 程序员:职业很抓狂!前途很迷茫?送你破解困境秘籍!
- [深入理解Android卷一全文-第八章]深入理解Surface系统
- Android竖虚线绘制
- 《Head First Java》| 1 进入Java 的世界
- 计算机网速单位是什么,文件大小和网速的单位
- 【houdini 基础】Ramp 参数
- 新浪微博架构和FEED架构分析--人人架构
- 【Elasticsearch教程13】Mapping字段类型之nested
- 视频教程-大数据电视收视率实战项目教程(企业级案例)-Spark
- 乐视2能刷原生android,乐视2高通版(S2) 魔趣OS 安卓9 MagiskV21版 完美ROOT 纯净完美 原生极简 纯净推荐...
- 解绑定和释放弹性云服务器的弹性公网IP