【携程】20250313 携程笔试

1. 字符串 100%

2. 贪心+排序 100%

每次选择数字应该选择最大的数字,这样确保了在挑选的数字个数相同的情况下,挑选的数字中的最小值就会尽可能地大。

那么就先排序,依次选择最大的数字,然后遍历得到最大的结果

3. 素数筛+滑动窗口 100%

优化计算权值:先找到所有的质数(题目规定数字最大是 10^4),用埃氏素数筛优化,然后用所有的质数去找到所有数字的质因数,这样就减少了迭代的次数

优化计算子数组之和:滑动窗口法,计算区间内的权值之和,这样就得到了剩下数字的权值之和

4. 并查集 100%

其实就是找路径上所有节点都是偶数,那么他们的最大公因数肯定是偶数,至少是 2

这里我一开始使用递归的方式,递归每一种情况,结果超时了,对了 78%

后来我转念一想,既然权值为奇数的节点是不能继续递归下去的,那么相当于这棵树被权值为奇数的节点分成了很多个子树

每个子树的情况可以单独考虑:假设有一颗有 n 个节点的树(节点权值都是偶数),那么每个节点都能到达剩下的 n-1 个节点,也就是说,总共有 n*(n-1)/2+n 条唯一的路径(+n 是因为自己到自己也算路径)

这不就是并查集吗!

构建逻辑:如果两个节点相连,并且两个节点的权值都是偶数,那么就 Merge

计算每个子树路径数:只要在构建之后用哈希表获得 map<父节点(意指并查集节点的最高父节点),每个集合的大小>,然后判断最高父节点的权值是不是偶数,如果是奇数这就不是一个合法的子树,否则就让 res += (n*(n-1))/2 + n

全部评论
并查集的解法确实不错,比树形dp好
点赞 回复 分享
发布于 03-13 21:19 广东
原来如此,并查集
点赞 回复 分享
发布于 03-13 21:06 湖北
并查集
点赞 回复 分享
发布于 03-13 21:05 上海

相关推荐

评论
13
16
分享

创作者周榜

更多
牛客网
牛客企业服务