10000+个数字钟找出top100
Java代码 收藏代码
import java.util.Arrays;
import java.util.Random;
public class Top100 {
private static Node head = null;
private static Node end = null;
private static Node tempNode = null;
private static Node node = null;
public static int[] getTop100(int[] inputArray) {
int result[] = new int[100];
int k = 100;
if (inputArray.length < 100) {
k = inputArray.length;
}
for (int i = 0; i < 100; ++i) {
result[i] = inputArray[i];
}
Arrays.sort(result);
for (int i = k - 1; i >= 0; i--) {
node = new Node(result[i], tempNode);
if (i == k - 1) {
head = node;
} else {
tempNode.right = node;
}
if (i == 0) {
end = node;
}else{
tempNode = node;
}
}
tempNode = end ;
for (int i = 100; i < inputArray.length; i++) {
int tempValue = inputArray[i];
if (tempValue <= end.value) {
continue;
}else{
tempNode = end;
setValue(inputArray[i]) ;
}
}
for (int i = 0; i < 100; i++) {
if (i == 0) {
node = head;
} else {
node = node.right;
}
result[i] = node.value;
}
return result;
}
private static void setValue(int tempValue) {
if (tempNode.value < tempValue) {
tempNode = tempNode.left;
//最大的
if(tempNode==null){
node = new Node(head,tempValue );
head.left = node ;
head = node ;
removeEnd() ;
}else{
setValue(tempValue);
}
} else if (tempNode.value != tempValue) {
node = new Node(tempValue, tempNode);
//要替代end
if(tempNode.right==end){
end.left.right = node ;
end = node ;
}else{
try {
tempNode.right.left = node;
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println(tempNode.right) ;
e.printStackTrace() ;
System.exit(0) ;
}
tempNode.right = node;
removeEnd() ;
}
}
}
private static void removeEnd(){
end = end.left ;
end.right = null ;
}
public static void main(String[] args) {
int numberCount = 1000000;
int maxNumber = numberCount;
int inputArray[] = new int[numberCount];
Random random = new Random();
for (int i = 0; i < numberCount; ++i) {
inputArray[i] = Math.abs(random.nextInt(maxNumber));
}
System.out.println("Sort begin...");
long current = System.currentTimeMillis();
int[] result = Top100.getTop100(inputArray);
System.out.println(System.currentTimeMillis() - current + "ms");
for (int i = 0; i < result.length; ++i) {
System.out.print(i + "." + result[i] + ",");
}
}
}
class Node {
protected int value;
protected Node left;
protected Node right;
public Node(int value) {
this.value = value;
}
public Node(int value, Node left) {
this.value = value;
this.left = left;
}
public Node(Node right, int value) {
this.right = right;
this.value = value;
}
}
分享到:
分享到:
相关推荐
标题中的“获取一个字符串中的数字组”是指从包含数字和非数字字符的字符串中提取连续的数字,并将它们作为整数处理。描述中提到的任务是输入一个字符串,例如"a123x456_17960? 302tab5876",从中找出所有的连续数字...
在Java编程语言中,将中文数字转换为阿拉伯数字是一个常见的需求,特别是在处理中文文本数据时。这个场景下,我们有一个名为“中文数字转成阿拉伯数字 java 实现”的压缩包,包含了一个实现此功能的Java包和一个单元...
4. **数字电子钟的设计**:设计一个数字电子钟需要实现精确的时间显示、时间校正功能和整点报时。这涉及到时钟的初始化、时间更新逻辑、校正机制以及报时信号的触发。 5. **校正时间功能**:校正时间功能允许用户...
这个问题通过修改两行代码得到了解决,这展示了编程中的一个常见实践:不断优化和修复已存在的代码以适应更多的情况。 标签“数字转换”进一步确认了这是一个涉及数字表示转换的程序设计问题。在PHP中,这类问题...
代码示例中通过一个循环遍历`CString`对象的每个字符,并检查这些字符是否属于数字范围或小数点。 #### 3. 数字和小数点的ASCII码值 在ASCII码表中,数字0到9的ASCII码值分别为48到57。小数点的ASCII码值为46。...
找出出现次数最多的数字,如果有多个数字出现次数相同,则答案为后输入的数字 主要考查有限循环、条件分支结构、变量、列表定义和使用、字符串操作等积木的使用 案例分析:http://gg.gg/12iokl
在通信系统中,数字信道化是一种常见的信号处理技术,用于将宽带信号分解成多个窄带通道,每个通道可以独立处理。多相滤波器是实现数字信道化的核心工具,尤其在数字频分复用(FDM)系统中应用广泛。MATLAB作为一种...
2020年)、移动电话普及率(每百人部数)(2011-2020年)、互联网宽带接入端口数(万个)(2011-2020年)、互联网域名数(万个)(2011-2020年)、软件业收入(万元)(2012-2020)、数字金融覆盖广度(2011-2020)...
总的来说,这个课程设计项目是一个综合性的实践任务,涵盖了数字电子技术的多个重要方面,旨在提高学生的动手能力和理论应用能力。通过这样的项目,学生不仅能学习到数字电路的基本知识,还能掌握使用现代EDA工具...
在数字电子技术课程中,一个常见的实践项目是设计并实现多功能数字钟。这个设计通常涉及使用硬件描述语言(HDL),如VHDL,来创建一个可以显示多种时间格式的时钟系统。以下是对这个项目及其相关知识点的详细说明: ...
- **空间复杂度**:空间复杂度为O(1),因为无论输入字符串多长,都需要且只需要一个固定长度为10的一维数组来存储数字出现的次数。 - **扩展性**:该算法易于理解和实现,适用于快速解决问题。但是,如果需要处理更...
本设计旨在通过理解数字钟的原理,运用VHDL语言来构建一个具备计时、整点报时和时间重置功能的多功能数字钟。VHDL是一种硬件描述语言,它允许设计者以抽象的方式描述数字系统的行为和结构,进而通过EDA(电子设计...
在这个场景中,我们需要从一亿个数字中快速找出前100个最小的数字。这通常涉及到排序算法和数据结构的运用,以达到在短时间内找到目标结果。以下是实现这个任务的一些关键知识点: 1. **优先队列(Priority Queue)...
数字时钟的扩展功能则是在数字时钟的主体添加的外电路部分,其由可多个与非门的逻辑电路构成整点报时、闹钟,也可由计数器或比较器与逻辑门组成一个报时电路或一个闹钟,以及日期的显示电路。 2.2硬件设计 2.21...
在PDF文档中,数字签名是通过在文档中嵌入一个由私钥生成的哈希值来实现的。这个哈希值代表了文档在签名时的内容,任何后续的修改都会导致哈希值的变化,从而使得签名无效。此外,数字签名还会包含签名者的证书,这...
而在语音识别中,识别每个字母的发音有助于准确解析用户说出的单词。 此外,这些音频文件还可以应用于无障碍技术,帮助视觉障碍人士理解和操作数字和字母相关的电子设备。比如,屏幕阅读器可以读取这些音频,将数字...
在C#编程中,判断一个字符串是否为数字是很常见的问题。今天,我们将介绍三种不同的方法来判断一个字符串是否为数字。 第一种方法:Try Catch 方法 该方法使用try catch语句来判断字符串是否为数字。例如: ``` ...
它将汉字拆分为不同的部分,每个部分对应一个或多个五笔码,通过这些五笔码的组合来输入汉字。数字五笔在此基础上,利用数字键进行编码输入,减少了手指在主键盘与小键盘之间的移动,提高了输入速度。 在数字五笔...
《深入浅出数字信号处理》是由江志红编著,北京航空航天大学出版社在2012年出版的一本专业书籍,旨在为读者提供一个清晰、易懂的数字信号处理学习平台。数字信号处理(Digital Signal Processing,简称DSP)是现代...
在编程领域,统计数字的重复次数是一个常见的任务,特别是在数据处理和分析中。这个任务可以通过多种编程语言来实现,例如Python、Java、C++等。这里我们主要以Python为例,探讨如何实现这个功能。 首先,我们需要...