阅读 8400 次
发表时间:2011-12-06
我是个懒人,不懂的高深的算法

单就问题本身,如果数据完整,
班级名称是顺序的,没有间隔,
可以直接用一个Map<String, List<>>来解决
Map.put(班级名, List)
List是可以add(index, Object)的,add(0, 老师)
这样一个遍历下来,Map塞满也就塞满了
然后拼接字符串,就可以打印出来了

如果班级名称不严格,比如有间断,
单独对Map里面的keySet排序,再从map里面取出打印,也行哦
发表时间:2011-12-06
抛出异常的爱 写道

TreeMap<string,TreeSet<UserBean>> t 
 for(User u :list){

   TreeSet temp =  t.get(u.getClass());
   if(temp==null) temp = new TreeSet();
   
   temp.add(u);
   t.put(u.getClass,temp);

}

正解
发表时间:2011-12-06
抛出异常的爱 写道

TreeMap<string,TreeSet<UserBean>> t 
 for(User u :list){

   TreeSet temp =  t.get(u.getClass());
   if(temp==null) temp = new TreeSet();
   
   temp.add(u);
   t.put(u.getClass,temp);

}

我也觉得还是抛哥的最好。。。。。
发表时间:2011-12-06
内存没有要求的话,O(N)可以解决。
要求内存的话(只够存一个List的)会有些难度
发表时间:2011-12-07
xxlbxx 写道
我是个懒人,不懂的高深的算法

单就问题本身,如果数据完整,
班级名称是顺序的,没有间隔,
可以直接用一个Map<String, List<>>来解决
Map.put(班级名, List)
List是可以add(index, Object)的,add(0, 老师)
这样一个遍历下来,Map塞满也就塞满了
然后拼接字符串,就可以打印出来了

如果班级名称不严格,比如有间断,
单独对Map里面的keySet排序,再从map里面取出打印,也行哦


我也是相同的思路

使用LinkedHashMap,这样不需要对keySet排序
遍历List:
    将每个user的classname作为key ,将List<user>作为value,同时排序List<user> (如果碰到type为老师的就跟第一个user交换)
end
for i=>0 - 10W:
    List<User> users = map.get(i);
    遍历users:
    打印
end:
       
  
也可以直接对List冒泡(只会这么一种排序。。)
对算法效率计算方式不大清楚,也不知道map效率是否有排序快
Global site tag (gtag.js) - Google Analytics