美团到店事业群上海广告平台部二面20210819
美团到店事业群上海广告平台部二面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
收到感谢信了,说实话,我不理解。算法题做出来了,二面只聊了项目,还发感谢信吗。
#美团点评##面经##校招##美团##Java工程师#

查看29道真题和解析