滴滴笔试

1好的三元组,回溯+dfs,不知道怎么去回溯
2树的结点到其他结点的距离的总和,应该是强连通分量下的bfs吗?
全部评论
第二题是换根dp,力扣第834题
3 回复 分享
发布于 2023-09-28 20:43 陕西
dfs 36%,一直超时,优化不出来
2 回复 分享
发布于 2023-09-28 20:43 浙江
第二个换根dp A的代码:#include<bits/stdc++.h> (35927)#define int long long using namespace std; const int N = 1e5+5; struct Node{ int u,v,next; }a[N]; int n,m; int tot,last[N]; int ans[N]; int dp[N]; int sum[N]; void add(int u,int v) { tot++; a[tot].u = u; a[tot].v = v; a[tot].next = last[u]; last[u] = tot; } void dfs(int u,int fa) { for(int i = last[u];i >= 0;i = a[i].next) { int v = a[i].v; if(v == fa) { continue; } dfs(v,u); sum[u] += sum[v] + 1; dp[u] += dp[v] + sum[v]+1; } } void dfs2(int u,int fa) { for(int i = last[u]; i >= 0; i = a[i].next) { int v = a[i].v; if(v == fa) { continue; } ans[v] = dp[v] + (ans[u] - (dp[v] + sum[v] + 1 )) + ( n - sum[v] - 1); dfs2(v,u); } } signed main() { tot = -1; memset(last,-1,sizeof(last)); cin>>n>>m; for(int i = 2;i <= n; i++) { int u,v; cin>>u; add(i,u); add(u,i); } memset(dp,0,sizeof(dp)); dfs(1,-1); ans[1] = dp[1]; dfs2(1,-1); for(int i = 1;i <= m; i++) { int u; cin>>u; cout<<ans[u]; if(i == m) { cout<<endl; } else{ cout<<" "; } } return 0; }
1 回复 分享
发布于 2023-09-28 20:51 广东
第一题回溯加记忆化搜索,避免重复计算,可以ac。第二题暴力过了73%,感觉可以打表,但不会打
1 回复 分享
发布于 2023-09-28 20:42 广东
输出2*n,偷了18%
1 回复 分享
发布于 2023-09-28 20:41 浙江
dd还有hc么
点赞 回复 分享
发布于 2023-09-28 23:35 广东
1.算出所有节点子树上节点的数量nums和子树的所有距离zdis 2.然后根节点子树所有距离就是距离整个树的距离,通过nums,zdis,以及父节点的整个树所有点距离,来递归向下计算当前节点的整个树的距离
点赞 回复 分享
发布于 2023-09-28 20:47 浙江
我两个题都是直接输出了案例,然后都是百分之18
点赞 回复 分享
发布于 2023-09-28 20:45 陕西
第二题BFS
点赞 回复 分享
发布于 2023-09-28 20:44 广东

相关推荐

1.&nbsp;JAVA集合,比较了解的都可以介绍。2.&nbsp;CopyOnWriteArrayList,然后它具体是一个怎么样的一个实现过程?能做到一个性能安全的?那他用&nbsp;reentrant&nbsp;lock&nbsp;的时候,里边用到了一个&nbsp;reach&nbsp;lock&nbsp;的一个什么特性?比如说两个读线程,他在访问的时候他可以同时得到吗?读什么?没加锁是吗啊?对,但是,嗯,他读的时候难道不会加个读锁吗?&nbsp;3.&nbsp;你&nbsp;concurrent&nbsp;Hashmap&nbsp;的话,它是具体是怎么实现的呀?&nbsp;4.&nbsp;你经常会在你的项目里边,或者是你自己习练习的一些代码里边会用到线程池吗?5.&nbsp;比如说我有一个场景,我要设计两种线程去干一件事,比如说我就要打印一个数,打印一个奇数和偶数,假设我从一要输出到100,我有两类线程,其中一类线程只是负责输出基数,另外一类线程只负责输出。那这个时候我把这些任务提交到,就假设我这个线程起来之后,我的要求就是这两类线程交替输出,就是什么&nbsp;1-&nbsp;100&nbsp;不会顺序乱,还能基于这么一个场景,你觉得应该你要有哪些实现方案呢?&nbsp;6.&nbsp;你这&nbsp;reentrant&nbsp;lock&nbsp;这块熟悉吗?7.&nbsp;咱们聊一下&nbsp;g&nbsp;v&nbsp;m,按照你这个顺序。嗯,你可以大概的描述一下&nbsp;GVM&nbsp;都有哪些,对于内存区域都有哪些划分呀?&nbsp;说话人&nbsp;2&nbsp;就是说这个运行的数据区是吧?还是说&nbsp;GM&nbsp;整体?那你对于这些区域中哪些区域是有可能发生&nbsp;OOM。&nbsp;你除了刚才这个,你比如说,你还介绍说除了程序计数器,还有,那你比如说方法区,方法区它是什么情况下或会&nbsp;OM&nbsp;呀?&nbsp;你可以分析一下哪些场景,哪些具体的场景会出现加载的类特别多,都有哪些情况会发生?那比如说你刚才说到了一个点,就是说动态加载的时候就是写了一些反射,你是指的是自己,比如说代码里还是用到了一个类似于一个反射的机制实现的一些代码,对吧?还有哪些情况,比如说你没有主动写反射,但是它也是会出现大量的加载。&nbsp;你了解他这个代理的里边实现具体的,具体他实现动态代理这块的话都有哪种方式啊?&nbsp;那你有了解过他们两个有什么样的差别吗?8.&nbsp;我现在给你一个二叉树的一个根节点,然后你帮我返回这棵二叉树最深那一层节点的值的和啊。行,我看一下你意义听明白了吗?
查看11道真题和解析 面试问题记录
点赞 评论 收藏
分享
评论
1
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务