Face++面试中遇到的问题,手写一个拓扑排序函数,数据按照链式存储,即每个点链表存储出度的点。
当时想出了一种解决方法,不过看了其他解法,感觉自己的方法有点复杂,不过时间复杂度都是O(n^2)。
我当时的想法:正序没法找到拓扑的前后顺序,但是反过来就迎刃而解。从结束点(出度为0)开始,入队列。然后将入度当前点的点加入队列中。这样就找到了反序的拓扑序列,然后利用栈的特点反转就得到答案了。
当时面试官还和我谈论验证这个解法,但我觉得没啥问题。
1 | /* |
Face++面试中遇到的问题,手写一个拓扑排序函数,数据按照链式存储,即每个点链表存储出度的点。
当时想出了一种解决方法,不过看了其他解法,感觉自己的方法有点复杂,不过时间复杂度都是O(n^2)。
我当时的想法:正序没法找到拓扑的前后顺序,但是反过来就迎刃而解。从结束点(出度为0)开始,入队列。然后将入度当前点的点加入队列中。这样就找到了反序的拓扑序列,然后利用栈的特点反转就得到答案了。
当时面试官还和我谈论验证这个解法,但我觉得没啥问题。
1 | /* |
最后更新时间:
本文链接:https://hankin2015.github.io/2018/10/31/20181031topo/版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!