A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© daoqin 高级黑马   /  2014-9-13 14:17  /  2766 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

10黑马币
假定现在有m个数据,无序的(m<=100万)
请你编程实现找出m个数据中前10最小的数据。时间限制:2000ms

最佳答案

查看完整内容

其实用TreeSet在1000000中查找前十个数据时间并不长,长的是在treeSet中放入1000000个数据,还好,没有超过两秒

4 个回复

倒序浏览
  1. import java.util.Comparator;
  2. import java.util.Random;
  3. import java.util.Set;
  4. import java.util.TreeSet;

  5. class Test
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                     //在treeSet中存放数据,自定义比较器
  10.                 Set<Integer> set = new TreeSet<Integer>(new Comparator<Integer>() {
  11.                                         @Override
  12.                                         public int compare(Integer o1, Integer o2) {
  13.                                                 return o1.intValue()>o2.intValue()?1:(o1.intValue()<o2.intValue()?-1:0);
  14.                                         }
  15.                        
  16.                                 });  
  17.                 //放入数据
  18.                 for(int i=0;i<1000000;i++){
  19.                         set.add(new Random().nextInt(1000000));
  20.                 }
  21.                
  22.                 //查询:
  23.                 System.out.println(System.currentTimeMillis()/1000);
  24.                 int i = 0;
  25.                 for(Integer s : set){
  26.                         System.out.println(s);
  27.                         i++;
  28.                         if(i == 10){
  29.                                 break;
  30.                         }
  31.                 }
  32.                 System.out.println(System.currentTimeMillis()/1000);
  33.                
  34.         }
  35. }
复制代码

其实用TreeSet在1000000中查找前十个数据时间并不长,长的是在treeSet中放入1000000个数据,还好,没有超过两秒
回复 使用道具 举报
AlanHand 发表于 2014-9-13 17:21
其实用TreeSet在1000000中查找前十个数据时间并不长,长的是在treeSet中放入1000000个数据,还好,没有超 ...

我今天做了一下,感觉窍门在10个最小的数据,所以没必要把100万数据都放入set中,只要维护10个数据的set,每次加数据的时候判断是否比10个数据中最大的小,如果小就替换,最后输出这10个数据就可以了。
回复 使用道具 举报
daoqin 发表于 2014-9-13 22:36
我今天做了一下,感觉窍门在10个最小的数据,所以没必要把100万数据都放入set中,只要维护10个数据的set ...

恩恩额恩,对头,我咋没有想到啦,但是会增加判断的消耗
回复 使用道具 举报
本帖最后由 毛毛毛玉 于 2014-9-19 18:40 编辑

如果真的只要十个的话,是不是存到LinkedList里面更好呢?红黑树存一百万个,也得有二十几层的高度了,还不如就用链表存10个数据,然后做比较。平均起来说不定还能快点呢。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马