2个答案 按时间排序 按投票排序
-
采纳的答案
import java.util.ArrayList; public class createDir { private static int num[] =new int [10000000]; private static ArrayList<Object> ans=null; public static void main(String[] arg){ for(int i = 0;i<10000000;i++){ num[i]= i+1; } boolean boo=true; int i = 0; while (boo) { int j = (int) (Math.random() * 10000000); int k = num[i]; num[i] = num[j]; num[j] = k; i++; if(i==100000){ boo =false; } } long start =System.currentTimeMillis(); ans = new ArrayList<Object>(); for(int j = 0;j<10000000;j++){ if(j<10){ ans = sort(ans,num[j]); }else{ if(num[j]>(Integer)ans.get(0)){ ans = getMaxValue(ans,num[j]); } } } long end =System.currentTimeMillis(); long total= (end-start); System.out.println(total + " ms"); System.out.println(ans); } private static ArrayList<Object> getMaxValue(ArrayList<Object> ans,int num){ for(int i=1;i<ans.size();i++){ if(num < (Integer) ans.get(i)){ ans.add(i,num); ans.remove(0); break; } if(i==ans.size()-1){ ans.add(num); ans.remove(0); break; } } return ans; } private static ArrayList<Object> sort(ArrayList<Object> ans,int num){ if(ans.size()>0){ int min = (Integer) ans.get(0); if(min>num){ ans.add(0, num); }else if(ans.size()==1){ ans.add(num); }else{ for(int i=1;i<ans.size();i++){ if(num < (Integer) ans.get(i)){ ans.add(i,num); break; } if(i==ans.size()-1){ ans.add(num); break; } } } }else{ ans.add(0, num); } return ans; } }
2014年8月05日 17:53
-
最快的做法时间复杂度就是O(NlogK)
其中N是你的所有数据的大小,K是你想取最大的多少个。
具体说就是循环所有的数据N,然后往一个PriorityQueue里面放(如果你用的是Java的话),这个Queue每次插入会自动排序,所以你需要做的就是当PriorityQueue的大小大于100的时候,每次看你下面循环的元素是否比这个PriorityQueue的第一个元素大,如果是的话,就抛弃第一个元素,把你现在循环的元素放进去。
最后将PriorityQueue里面元素都打印出来就可以了。
你循环所有的数据的事件复杂度是O(N),那个PriorityQueue内部用的是堆排序,所以你可能会以为结果是O(NlogN),实际上,当N远远大于K的时候,结果是近似O(NlogK)的。
这个方法肯定是最快的了,想得到完美的数学证明的话,可以参考下面的文章:
http://stackoverflow.com/questions/19227698/write-a-program-to-find-100-largest-numbers-out-of-an-array-of-1-billion-numbers2014年8月05日 18:55
相关推荐
Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法...
共有7个 很不错的java算法题 共有7个 很不错的java算法题 共有7个 很不错的java算法题 共有7个 很不错的java算法题 共有7个 很不错的java算法题 共有7个 很不错的java算法题
java算法题java算法题java算法题java算法题java算法题java算法题java算法题java算法题java算法题java算法题
本资源“java算法题(各种语言通用)”显然旨在帮助程序员,特别是Java开发者,提高他们的算法理解和实现能力。虽然题目是用Java编写的,但它们的概念和逻辑通常可以应用于其他编程语言,体现了算法的通用性。 首先,...
java算法题 java算法题 java算法题 java算法题java算法题
java算法题java算法题java算法题java算法题
java算法题java算法题java算法题java算法题
很不错的java算法题 很不错的java算法题 很不错的java算法题 很不错的java算法题 很不错的java算法题
Java算法题涵盖了许多基础到进阶的编程概念,主要集中在数据结构、算法设计以及逻辑推理上。以下是对这些题目涉及的知识点的详细说明: 1. **兔子问题**(斐波那契数列): - 知识点:斐波那契数列,递归算法。 -...
共有7个 很不错的java算法题 共有7个 很不错的java算法题 共有7个 很不错的java算法题 共有7个 很不错的java算法题 共有7个 很不错的java算法题 共有7个 很不错的java算法题
"最新java算法题50"是一个专门为Java程序员设计的资源,它包含了50个精心挑选的算法题目,旨在挑战和提升你的编程思维能力。这些题目覆盖了基础到高级的算法,对于准备面试、提升技能或者进行日常学习都是非常有帮助...
通过解决这些算法题,开发者可以锻炼逻辑思维,理解和掌握数据结构,如数组、链表、栈、队列、树、图等,以及排序、搜索、图论、动态规划等核心算法。 在JAVA经典算法40题.doc中,可能包含的题目类型有递归、分治、...
【标题】"刷过的Java算法题源码仓库"所涉及的知识点主要集中在Java编程语言以及算法的应用上。这个标题暗示了这是一个包含多个Java实现的算法题目解决方案的集合,可能来自于像LeetCode、HackerRank这样的在线编程...
首先,让我们来看看Java算法中的基础部分——排序算法。Java中常见的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序和堆排序等。冒泡排序和插入排序适用于小规模数据,而快速排序和归并排序则在大数据...
总的来说,这份"Java算法题总结"资源应该包含了各种类型的题目,旨在通过实战练习提高读者的算法思维和编程技巧。通过不断练习和理解这些算法,不仅可以提升编程技能,还能在面试和实际工作中游刃有余。对于每个算法...
"JAVA算法题" 本资源提供了一个丰富的Java算法题库,包含基础题、深入题和综合题共一百多道。这些题目涵盖了Java基础知识、算法和数据结构、面向对象编程等多个方面,对于初学者来说非常有帮助。 下面是该资源中的...
在Java编程语言中,数组是一种基础且重要的数据结构...通过学习和实践上述知识点,对于Java算法题中的数组问题,你将能够游刃有余地进行解答。不断练习和深入理解数组的特性,可以提升你在算法设计和问题解决上的能力。
JAVA算法编程题目及答案 本资源提供了50道JAVA算法编程题目及答案,涵盖了算法设计、数据结构、程序设计等多个方面的知识点。以下是对标题、描述、标签和部分内容的详细解释: 标题:JAVA算法编程题目及答案 本...
根据提供的文件信息,我们可以归纳总结出以下几个主要的IT知识点: ### 1. 兔子繁殖问题(斐波那契数列) ...这些知识点涵盖了常见的数据结构、算法应用以及Java编程技巧,对于初学者来说是非常好的学习资源。
全国软件专业人才设计与开发大赛是一项旨在提升大学生在软件设计与开发能力上的竞赛,其中Java算法试题是比赛的重要组成部分。这个压缩包包含了参赛者在历届比赛中遇到的经典算法题目及对应的解题代码,对于学习和...