蚂蚁算法实习2024.3.26笔试

不小心做了实习笔试,记录一下。选择题一直不太会,略过。
第一题题意:数字符串(长度n<20)只包含一些特定字符的回文子串。
做法:根据数据范围,直接二进制枚举。时间复杂度O(n * 2^n)。

第二题题意:。。模拟某个机器学习数据处理。。
做法:输入对写c++的不太友好,py3模拟一下。

第三题题意:给定一个01字符串(长度n<1e5),开始和结束位置为1,第一问,求从开始到结束位置最少跳几次,跳跃规则只能跳在1上,若上一次跳了x步,当前可以向前跳2x步或者1步,否则只能跳1步。第二问,当没有策略从起始位置跳到最后位置时,问最少把多少个0改为1能够使得第一问满足。
做法:常规动态规划。注意到数据范围n<1e5,对于2的幂次小于19。
所以对于第一问,记dp[i][j]表示当前位置i,表示能够向前跳2^i的跳到当前位置的最小跳跃次数,转移方式特判一下j为0的时候,dp[i][0] = min{dp[i-(1<对于第二问,记dp[i][j]表示当前位置i,表示能够向前跳2^i的最小次数跳到当前位置最小需要填几次0。转移方程对于当前为1或者0分开考虑,也要特判j为0的情况。对于s[i] == 1时候,dp[i][0] = min{dp[i-(1<
全部评论
二进制枚举可以的,第一题用回溯不知道怎么一直报错,可能是有些边界条件不对
1 回复 分享
发布于 03-26 21:00 新加坡
对于s[i] == 1时候,dp[i][0] = min{dp[i-(1<<j)][j]},j不是0时为dp[i][j] = min{dp[i-(1<<j - 1)][j-1]}。对于s[i] == 0时候,dp[i][0] = min{dp[i-(1<<j)][j] + 1},j不是0时为dp[i][j] = min{dp[i-(1<<j - 1)][j-1] + 1}。
点赞 回复 分享
发布于 03-26 20:20 上海
tql
点赞 回复 分享
发布于 03-26 21:24 湖北

相关推荐

Pandaileee:校友加油我现在也只有一个保底太难了
点赞 评论 收藏
分享
10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
3 6 评论
分享
牛客网
牛客企业服务