锁定老帖子 主题:java一道10k面试题,看看值不值???
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间: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效率是否有排序快 |
|
返回顶楼 | |