小红书4.23笔试 3/3 口胡题解

没保存代码,口胡一下 #小红书# #笔试#

第一题是A_n = 1 + (n + 1) * A_{n - 1},递推即可。
复杂度O(n)

第二题是dfs找连通块,遍历到的红色点全部涂回白色,每一次找红色的点进行dfs,并统计一下连通块中点的数量,然后排序输出第k大即可。
复杂度O(n)  (如果排序的话要加 m logm(m为连通块数),不过本来求第k大也有O(m)的解法,就是这里没必要用)

第三题首先找长度为n的所有字串的美丽度之和。
使用r[n], re[n], red[n]代表长度为n的所有子串出现'r', 're', 'red'的次数。
分成前n-1位和最后一位去看。
r的话,最后一位有三种选择,所以前n-1位r的总数量要乘3,然后再加上最后一位是r,前n-1位有3^(n-1)种选择。
re的话,最后一位有三种选择,所以前n-1位re的总数量要乘3,然后再加上最后一位是e时,前n-1位中r的数量。
red的话,最后一位有三种选择,所以前n-1位red的总数量要乘3,然后再加上最后一位是d时,前n-1位中re的数量。   
r[n] = r[n - 1] * 3 + 3^(n - 1)
re[n] = re[n - 1] * 3 + r[n - 1]
red[n] = red[n - 1] * 3 + re[n - 1]
r[0] = re[0] = red[0] = 0
从1开始递推。
red[n]即长度为n所有字串的美丽度之和。
然后开始找长度为n所有字串的权值之和。
一共有3^n个串,其中含有的长度为k的子串有(n - k + 1)个,因此长度为n的字符串中,含有的长度为k的子串的个数一共是3^n * (n - k + 1)。
又因为所有长度为k的子串出现的次数相等,因此每个长度为k的子串出现了3^(n - k) * (n - k + 1)次。
所以直接计算sum{ red[k] * 3^(n - k) * (n - k + 1) }(3 <= k <= n)即可。
注意一下取模时机,三个数相乘容易爆long long,每两个数相乘就取一下模。
复杂度O(n)
全部评论
第三题写的好!(我感觉这应该已经是这种子序列问题的极限难度了)
1 回复 分享
发布于 2023-04-24 16:37 江苏
第三题题解写的太好了
点赞 回复 分享
发布于 2023-04-24 21:57 陕西
大佬 第三题写的好呀
点赞 回复 分享
发布于 2023-04-23 22:21 湖北
第二题一直卡27%不知道为啥
点赞 回复 分享
发布于 2023-04-23 19:11 北京
第二题总是36% 很奇怪 明明很简单的dfs染色问题
点赞 回复 分享
发布于 2023-04-23 19:00 江苏
我没有明白第二题那个u v的意思,我想问问大佬,u的值能重复吗,也就是说每个节点能出度为2吗?
点赞 回复 分享
发布于 2023-04-23 18:54 北京
想问问第三题三个数组的递推式是怎么出来的呢
点赞 回复 分享
发布于 2023-04-23 18:42 广东

相关推荐

头像
11-03 16:48
已编辑
百度_高级研发工程师
事实是检验真理的唯一标准。 无论我们怎么去说,去讲述,去证明,都抵不过一个offer来得实在,无论我们怎么去复现求职中的摸爬滚打、扒皮抽筋、狼狈不堪,都抵不过你在简历写上大厂的名字(外包不算)。 所以在我求职期间,我什么话都不说,什么话都不讲,因为没有意义,虽然我总讲过程才是意义,但只有当你上岸的那一刻,你才有资格回想在水里的挣扎,只有等你出了山,你才知道山的全貌。 我为什么一定要离开华为OD,难道它不稳定吗,不能赚钱吗。为了证明自己,那肯定有的。其实更多的是印证我的认知是否真的正确。 (给不了解我的人交代一下背景,在下双非一本,gap一年,华为OD外包,摸爬滚打4个月,艰难上岸百度正编)一、...
先锋战士:说得很真诚。鄙视链自古有之,学历,家庭背景,财富,权利。从小有之,小学羡慕那些当班委的,中学羡慕那些学生会的,高中羡慕尖子班拿教学金的,大学羡慕高绩点,毕业了羡慕进大厂的。工作了,又羡慕高职级的,再后来又羡慕别人早早结婚的。我想表达的观点很简单,无论是华为od还是百度,都是经历,没有孰高孰低,为了抵达下一个风景,总会付出更多东西,但不就是人生吗?正如登山,每个阶段的山,都要想办法攀登,在博主的文字中,见到了坚持和积极寻找问题解决办法的心态
学历对求职的影响
点赞 评论 收藏
分享
点赞 评论 收藏
分享
09-17 19:25
已编辑
太原理工大学 游戏测试
叁六玖:公司名发我,我要这个HR带我打瓦
我的秋招日记
点赞 评论 收藏
分享
评论
7
15
分享

创作者周榜

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