美团到店事业群上海广告平台部二面20210819
双非本科艰难求职。全程聊实习。跟我说就两轮技术面,现在在等通知。
- 自我介绍
- 两段实习做的东西介绍一下
- 拓扑排序,没有原题吧,自己想的。我下面回忆一下题
最开始输入两个数,n,m。n表示n个节点,m表示,m个判断。下面输入m个判断。
如果第一行输入4 4,那么下面输入
1 2
1 3
2 4
2 3
表示1>2,1>3,2>4,2>3
问最后可不可以输出一个排序。
给出我的代码
public void solve(int[][] arr, int n, int m) { //int n = arr.lengt; int[] cnt = new int[n + 1]; Map<Integer, List<Integer>> map = new HashMap(); for (int i = 0; i < arr.length; i++) { List<Integer> list = map.getOrDefault(arr[i][0], new ArrayList()); list.add(arr[i][1]); cnt[arr[i][1]]++; map.put(arr[i][0], list); } //System.out.println(map); Queue<Integer> queue = new LinkedList(); for (int i = 1; i <= n; i++) { if (cnt[i] == 0) { queue.add(i); cnt[i]--; } } List<Integer> list = new ArrayList(); while (!queue.isEmpty()) { int size = queue.size(); for (int i = 0; i < size; i++) { int v = queue.poll(); list.add(v); List<Integer> l = map.getOrDefault(v, new ArrayList()); for (int j = 0; j < l.size(); j++) { cnt[l.get(j)]--; } } for (int i = 1; i <= n; i++) { if (cnt[i] == 0) { queue.add(i); cnt[i]--; } } } //System.out.println(list); if (list.size() < n) { System.out.println("no"); } else { System.out.println(list); } }
更新0820
收到感谢信了,说实话,我不理解。算法题做出来了,二面只聊了项目,还发感谢信吗。
全部评论
(5) 回帖