【面试】Liveramp 面试题 面经 城市问题
2017-02-19 05:44
369 查看
以上来自:http://www.1point3acres.com/bbs/forum.php?mod=viewthread&tid=138979&pid=2817216&page=1&extra=page%3D1%26filter%3Dsortid%26sortid%3D311%26searchoption%255B3089%255D%255Bvalue%255D%255B5%255D%3D5%26searchoption%255B3089%255D%255Btype%255D%3Dcheckbox%26searchoption%255B3046%255D%255Bvalue%255D%3D28%26searchoption%255B3046%255D%255Btype%255D%3Dradio#pid2817216
题目要求求出距某一节点为1,2,3,4.。。M-1距离的节点数目。
这个题目首先给出了一个用数组存tree的方法。传统方法是用链表方式。这里给出了数组方式。当然如果是二叉树,用数组很好表示,但是这里的树的度并没有限制,最终却存在一个On空间的方法,值得学习。不过这里有一个要求就是节点的值是从0开始连续的值。
任何一个树都可以选择任意一个节点作为root,然后为了表示某一个节点是root,我们可以对该节点做特殊处理,就是让其指向自己,即A[i]=i。对于其余的点,每一层都指向其父节点,A[i]=j,i是子节点,j是父节点。这样正好可以用On的数组来表示整颗树。而且表示方式是唯一的对于每一棵树而言。
解题思路是,按照bfs输出即可。当时为了满徐题目Om的复杂度,需要对tree做处理,因为要找i的孩子节点,在数组的表示下只能遍历,这样复杂度是n2,所以开始先用一个map来存每一个节点的子节点,这样查找就是O1级别的。整体的复杂度是On。
public int[] position(int[] array){ if(array == null) return null; Map<Integer, List<Integer>> map = new HashMap<>(); Queue<Integer> queue = new LinkedList<>(); for(int i = 0; i < array.length; i++){ int des = array[i]; if(des == i){ queue.add(i); continue; } if(!map.containsKey(des)) map.put(des, new ArrayList<>()); map.get(des).add(i); } int[] res = new int[array.length - 1]; int layer = -1; while(!queue.isEmpty()){ int size = queue.size(); if(layer != -1) res[layer] = size; for(int i = 0; i < size; i++){ int des = queue.poll(); List<Integer> list = map.get(des); if(list != null) queue.addAll(list); } layer++; } return res; }
相关文章推荐
- 【面试】Liveramp 面试题 面经 子序列问题
- 【面试】Liveramp 面试题 面经 猴子过河问题
- 【面试】Liveramp 面试题 面经 青蛙过河问题
- 【面试】lliveramp 面试题 面经 最大时刻问题
- 最广为流传的面试问题-微软面试题
- (C/C++面试题)没看过不知道自己有多差!!!!原本以为自己C还可以,也做过几个项目了,看了这些面试问题,我傻住了!!!!
- 面试题四 C/C++面试秘笈 之判断链表是否存在环形链表问题-程序员面试题
- 15个顶级Java多线程面试题及回答 / Java程序员面试中的多线程问题
- java面试题------40个Java集合面试问题和答案
- 主题:迅雷亲历面经:笔试+上机+面试(完整JAVA面试题求解大讨论)
- 转:迅雷亲历面经:笔试+上机+面试(完整JAVA面试题求解大讨论)
- 面试题_125_to_133_Java 面试中其他各式各样的问题
- 15个顶级Java多线程面试题及回答 / Java程序员面试中的多线程问题
- 水池问题的lua语言算法(面试题分析:我的Twitter技术面试失败了)
- java高级工程师面试最可能会遇到的问题面试题
- 【面试】面试题之汽水空瓶子问题
- 面试题——C/C++经典问题,及面试笔试题
- 面试题——C/C++经典问题,及面试笔试题
- java面试题之 城市之间路段的问题
- 面试常见问题--android高级面试题精选3篇