9.11 阿里国际笔试(工程岗)

第一题,电影的最大期待值。如果要每天都更新之前的电影到今天还有多少期待值,然后和今天的电影比,那就太麻烦了,可以把所有电影的期待值都推回到第一天,第i天的电影在第一天的期待值为ai+d*(i-1),然后用大顶堆记录,每次先更新再取堆顶即可,取出堆顶后减去d*(i-1)得到实际的期待值。这里不用考虑减去后小于0的问题,因为今天上映的电影的期待值是一定大于0的,也就是堆里面一定有一个大于0的元素。

第二题,使数组元素相等的最小次数。遍历所有元素,如果%x的值不相同(用set记录,判断size!=1),则返回-1;否则所有数除以x,因为除之后可以直接计算操作次数(除之前一次加减x,除之后一次加减1)。

这里直接说结论,把所有数组元素除x之后的结果排序,中间位置(第m*n/2个元素)就是要最终变成的数,用for循环计算操作次数即可。具体证明可以看力扣第462题,最小操作次数使数组元素相等 II。

第三题,dp+滚动数组优化过了60%。用dp[n+1][k]记录数量,具体来说,dp[i][j]表示长度为i、相邻字符不同的字符串有多少个,显然dp[i][j] = dp[i-1][j] + 25 * dp[i-1][j-1],最后结果为dp[n]的数组的和,转移过程和最后求和都需要注意取模。又显然dp[i]只与dp[i-1]有关,且n,k都是1e5级别的,所以可以用滚动数组进行优化。这个解法过了60%,超时。

正确的解法(感觉对但是没调出来)应该是,长度为n的数组有n-1个相邻字母对,相邻字母对不同的数量不超过k个,则枚举不同的相邻字母对的数量为0<=i<k。

对于确定的i,可能有C(n-1, i)种不同的选择方案,每个不同的字母对可以有25种选择,相同的字母对只能有一种选择,第一个字母有26种选择,因此每个i的总字符串数量应该有26*25^i*C(n-1, i)种,最终结果是前面这个的和。但是这种解法我没写出来,细节上估计有点问题,不知道有没有大佬过了。
全部评论
第三题那个解法是对的,注意快速幂里面要用long,被这个坑了
点赞 回复 分享
发布于 2023-09-11 21:44 北京

相关推荐

2025-12-13 21:01
已编辑
百度_meg_前端开发(实习员工)
走到这一步,确实有些意外。先简单说说我的情况,我是双非本,大一那年对后端兴趣特别浓,学了快一年半。但不知为什么越往后学兴趣越淡——大概到分布式那块,比如nacos、卡夫卡这些,感觉越来越吃力。再加上看到师兄师姐在后端方向上的碰壁(现在是大go时代),在和师兄师姐商量后我在今年一月左右转前端了或许是因为有java的基础,对项目开发流程有些概念,前端三件套我过得比较快。之后学了Vue,动手做了自己的博客,这大概也是我转前端的一个重要原因吧,一直很想拥有一个属于自己的个人博客,能按自己的想法去设计、实现,并长期迭代完善,这种成就感真的很棒。之前拿过别人的开源项目来更改&nbsp;但是自己修改的就是一坨,那个时候缺少对前端代码的理解&nbsp;就算借助ai做出来的效果也是一坨就这样到了大二暑假,我觉得该找份实习,丰富一下简历了。我自认不是很有创造力的人,平时少有自发的项目灵感,所以更希望通过实习开阔眼界、提升能力。一开始投递和面试的过程挺煎熬的,或许是因为目标多是中小厂,很多hr已读不回,或是直接砍半薪资问我接不接受。面试时也常觉得像在走流程,问的都是八股文,有的面试官还会边看题边问,甚至有一次十分钟就结束了,好在最后钛动给了我机会。实习期间我学到了很多,虽然也常被拷打,还好ld会帮我收拾烂摊子。从钛动离职回校后,我半推半就地背八股、学新技术,无聊时就刷里扣、看看牛客和biss。原本以为双非bg很会被hr速度筛掉所以就尝试性的投了纷享销客和百度的日常实习,没想到最后两家都oc了,雷姆了家人们,双非鼠鼠居然圆了大厂梦yysy,这一路其实冒了不小的风险。毕竟学了那么久的后端,大学四年时间有限,突然转前端,意味着很多积累的知识可能用不上了。但我很庆幸当时有放下的勇气。无论过去做了什么选择,我都想感谢当时的自己,因为那份勇气,才走到了今天。同时也很感谢这一路师兄师姐的帮忙,师兄帮忙模拟面试,提供资料,师姐教我如何选择岗位,如何处理实习带来的问题马上就要北漂了,对未来是充满了期待也存在着恐惧,南方人头一次去这么远的地方,每天都能看到雪,可以跟实力强劲的同事合作,想想都很兴奋,但是也害怕自己不能胜任这份工作会被压力到爆,但是不管怎么样大家一起互勉吧,呆在舒适区只会停滞不前,压力才能带来成长
牛马人的牛马人生:勇敢追梦
2025年终总结
点赞 评论 收藏
分享
评论
2
5
分享

创作者周榜

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