网易笔试7.21ME
网易笔试7.21ME,做的不好,估计挂了 ,说下我具体的思路,
第一题:直接翻转遍历,AC!
第二题:图的简历,求最小祖先即可,但是这里需要遍历m - > n中的每一个节点。没时间写了!
第三题:把数据处理好了后,直接翻转下,归并排序即可,但是我写的归并排序,最后只通过60%左右,不知道问题在哪里!
第四题:并查集,一道简单的并查集,但是我写出来后,答案总是错误,只通过10%,用的map写的,不知道问题出在哪里!我太菜了!
总之:都是简单题,但是我基本功不扎实,估计没戏了。
希望大佬们可以贴下你们的代码,讨论下。
如果解题思路有错误,请指正!
第一题的AC代码:一遍通过,写的不好,大佬们不要喷啊!
vector<vector<int> > invert_tree(int** node_data_list, int node_data_listRowLen, int* node_data_listColLen) { int n = node_data_listRowLen; int root = 0; vector<vector<int> > tree(n+1, vector<int>()); vector<vector<int> > ans; for(int i = 0; i < n; i++) { int id = node_data_list[i][0]; int p = node_data_list[i][1]; if(p == 0) root = id; else tree[p].push_back(id); } for(int i = 1; i <= n; i++) { reverse(tree[i].begin(), tree[i].end()); } ans.push_back({root,0}); dfs(root, 0, tree, ans); return ans; } void dfs(int root, int parent, vector<vector<int> >& tree, vector<vector<int> >& ans) { for(int i = 0; i < tree[root].size(); i++) { ans.push_back({tree[root][i], root}); dfs(tree[root][i], root, tree, ans); } }