京东0827笔试题解

第一题送分题不表

第二题长城,和网易0820笔试完全一样
题目:将一个数组变为长城的最小操作次数,每次操作可以修改任意一个元素。(长城即奇数位数字全部相等、偶数位数字全部相等的数组,如[1,4,1,4,1,4,1])

分奇偶数位统计出现频率最高的数,然后ans = n - max_count_odd - max_count_even即可
但是要注意出现奇数和偶数频率最高的数相等的情况,所以需要同时记录出现频率第二多(或并列第一)的数字,在出现相等的情况时额外比较一下


第三题漂亮串
题目:一个只含小写字母的字符串如果含两个'red’即为漂亮串,如'redared'为漂亮串,‘reedred’不是漂亮串
输入n,输出以长度为n的字符串有多少种可能的漂亮串

(题解是事后想出来的,不确定能不能ac,测试了n<10的情况和手推的是一样的)
使用两个递推数组求解:

an 为长度为n的字符串中一个red都没有的可能数
递推公式:an = 26 * an-1 - an-3 (对于每个长度为n的串,在n-1的基础上尾加上一个字符有26 * an-1种情况,再减去填上一个字符恰好凑成一个red的情况an-3

bn 为长度为n的字符串中恰好有一个red的可能数
递推公式:bn = 26^n - an

则有
解释:枚举第一个red出现的位置,若第一个red出现的位置为i,那么在0~i-1的子串中不含有red,i+3~n-1的子串中含有至少一个red,共有ai * bn-i-3 种情况。枚举i的所有可能取值[0, n-3]
复杂度O(n)
python代码

#京东##京东笔试##面经笔经##秋招##题解#
全部评论
ans是不是从i=0到i=n-6 至少要给第二个red留三个位置   bn表示的应该是至少有一个red的情况
点赞 回复 分享
发布于 2022-08-27 22:40 江苏
an求错了吧?a3显然等于26^3-1,不需要乘二,因为n-1的串往前加字符和往后添字符是一样的会有重复
点赞 回复 分享
发布于 2022-08-27 23:16 北京
第三题A了10%直接交卷不写了哈哈哈,看起来像数学题
点赞 回复 分享
发布于 2022-08-27 23:20 北京

相关推荐

11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
评论
3
27
分享
牛客网
牛客企业服务