阿里笔试419 45minAK题解
写了大概45min 感觉挺水的~
第一题写了20min 第二题写了10min 第三题写了15min
T1 给定一个序列,问有多少个区间的众数次数>=k
sol:考虑two-pointer。枚举左端点,寻找最小的右端点是的众数次数>=k
推导后发现需要支持以下功能
1.增加某一个数的出现次数
2.减少某一个数的出现次数
3.查询众数的出现次数(即出现次数最多的数字的出现次数)
这些功能可以抽象化可以理解为维护一个集合,支持单点修改,支持查询最大值
因此考虑使用堆来实现,具体实现过程类似dijkstra找最短节点的过程。
T2 题意大概就是模拟一个消消乐的过程
sol:bfs暴力模拟消除的过程,而下落的过程可以逐行维护每一列的高度来模拟实现。
T3 求所有长度为n的字符串有多少个长度为3的回文子串
考虑动态规划
考虑一个字符串的最后两个字符的形式,要么是"aa",要么是“ab”。
不妨记
"aa"结尾的字符串的数量为x[n],记这些字符串的权值和为fx[n]。
记"ab"结尾的字符串的数量为y[n],记这些字符串的权值和为fy[n]。
"aa"有两种转移方式——>"aaa",“aab”
其中"aaa"有1种方式。
其中"aab"有25种方式,指的是填与"a"不同的25个字符。
"ab"有三种转移方式——>"aba",“abb”,"abc"
其中"aba"有1种方式。
其中"abb"有1种方式。
其中"abc"有24种方式,指的是填与"a"不同的25个字符。
这里简单写一下dp的转移方程
x[n]=x[n-1]+y[n-1]
fx[n]=x[n-1]+fx[n-1]+y[n-1]
y[n]=25x[n-1]+25y[n-1]
fy[n]=25fx[n-1]+y[n-1]+25fy[n-1]
直接暴力dp复杂度为O(n)
考虑使用矩阵快速幂优化(类似快速求斐波那契数列)
即可做到O(logn)
第一题写了20min 第二题写了10min 第三题写了15min
T1 给定一个序列,问有多少个区间的众数次数>=k
sol:考虑two-pointer。枚举左端点,寻找最小的右端点是的众数次数>=k
推导后发现需要支持以下功能
1.增加某一个数的出现次数
2.减少某一个数的出现次数
3.查询众数的出现次数(即出现次数最多的数字的出现次数)
这些功能可以抽象化可以理解为维护一个集合,支持单点修改,支持查询最大值
因此考虑使用堆来实现,具体实现过程类似dijkstra找最短节点的过程。
T2 题意大概就是模拟一个消消乐的过程
sol:bfs暴力模拟消除的过程,而下落的过程可以逐行维护每一列的高度来模拟实现。
T3 求所有长度为n的字符串有多少个长度为3的回文子串
考虑动态规划
考虑一个字符串的最后两个字符的形式,要么是"aa",要么是“ab”。
不妨记
"aa"结尾的字符串的数量为x[n],记这些字符串的权值和为fx[n]。
记"ab"结尾的字符串的数量为y[n],记这些字符串的权值和为fy[n]。
"aa"有两种转移方式——>"aaa",“aab”
其中"aaa"有1种方式。
其中"aab"有25种方式,指的是填与"a"不同的25个字符。
"ab"有三种转移方式——>"aba",“abb”,"abc"
其中"aba"有1种方式。
其中"abb"有1种方式。
其中"abc"有24种方式,指的是填与"a"不同的25个字符。
这里简单写一下dp的转移方程
x[n]=x[n-1]+y[n-1]
fx[n]=x[n-1]+fx[n-1]+y[n-1]
y[n]=25x[n-1]+25y[n-1]
fy[n]=25fx[n-1]+y[n-1]+25fy[n-1]
直接暴力dp复杂度为O(n)
考虑使用矩阵快速幂优化(类似快速求斐波那契数列)
即可做到O(logn)
全部评论
我先膜了
第三题,直接(n-2)*26^(n-1),特判n<3,快速幂即可
太猛了吧、
这就是神仙卧槽
阿里数字供应链部门刚开始春招,欢迎同学踊跃报表。查看个人首页帖子 查看部门介绍和扫码线上投递简历。 https://www.nowcoder.com/discuss/472422701500485632
相关推荐
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享