fanqiexi level
获赞
31
粉丝
23
关注
0
看过 TA
381
复旦大学
2024
算法工程师
IP属地:上海
暂未填写个人简介
私信
关注
2024-05-26 20:33
已编辑
复旦大学 算法工程师
有点伤感秋招不努力,都要毕业了这个时间点还在做笔试,按道理应该是去度假的。第一题题意: 给定一个长度为n (n < 1e5) 的序列以及一个数m(1 < m < 1e5),序列中每个数的范围为0~1e9,求所有的位置p使得序列前p个数包含k组1~m的所有值。比如n=9,m=4,序列为[2, 3, 4, 1, 5, 1, 2, 3, 4],答案输出4和9。第一题做法:搞个数组存一下1~m出现的次数,标记表示一下有多少0变到1,每次加1,每当标记加到m,数组所有值减1,标记每当1变到0时减1。时间复杂度O(n)。第二题题意:给定一个长度为n (n < 2e5)的01字符串以及操作次数m (<1e9),每个操作选择位置x,使得字符串位置x和位置x+1不变,其余位置全部翻转(0变为1,1变为0)。求操作完毕之后字符串对应二进制的最小值。第二题做法:首先转化一下题意,操作可以变为:一、先将字符串所有位置翻转m次,二:进行m次翻转相邻两个位置的操作。对于第一步操作:当m为偶数时不变,奇数时翻转;对于第二步操作,从左到右贪心,为1时翻转。多余的操作就只动最后一位。时间复杂度O(n)第三题题意:给定一个长度为n (n < 1e5) 的数组,进行q(<1e5)次对原数组的查询,问最小进行几次操作使得第k大的数为x (<1e9),每次操作可以选择数组的某个数加1。第三题做法:(第k大等价于第l = n+1-k小)首先对数组进行排序,然后求前缀和,对于每次查询,二分查找找到第一个比x大的位置pos,答案为(pos - l + 1) * x - sum[pos] + sum[l - 1]。时间复杂度O(nlogn + qlogn)第四题题意:给定p, q, n,(p, q <= n < 1e18),表示容量为n的容器,一开始存储为0,每次可以加p(剩余容量大于等于p)或者减去q(容器已有至少为q),当存在既不能加p也不能减q的情况输出Yes,否则No。第四题做法:分类讨论一下,虽然表达式一样。当p > q时,No的情况为 p + q - gcd(p, q) > n。当p < q时,No的情况为 q + p - gcd(p, q) > n。时间复杂度O(log n)。
给了offer吧:太菜了我做了pdd的笔试才发现自己有多TMD菜
查看4道真题和解析 投递拼多多集团-PDD等公司10个岗位
0 点赞 评论 收藏
分享
2024-03-30 11:45
已编辑
复旦大学 算法工程师
shadox:第二题没必要上线段树,二分加差分就行
投递蚂蚁集团等公司10个岗位
0 点赞 评论 收藏
分享
2024-03-26 20:19
已编辑
复旦大学 算法工程师
不小心做了实习笔试,记录一下。选择题一直不太会,略过。第一题题意:数字符串(长度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<<j)][j] + 1},j不是0时为dp[i][j] = min{dp[i-(1<<j - 1)][j-1] + 1}。对于第二问,记dp[i][j]表示当前位置i,表示能够向前跳2^i的最小次数跳到当前位置最小需要填几次0。转移方程对于当前为1或者0分开考虑,也要特判j为0的情况。对于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}。
投递蚂蚁集团等公司10个岗位
0 点赞 评论 收藏
分享
2024-03-24 11:33
已编辑
复旦大学 算法工程师
#软件开发2024笔面经# 记录一下。第一题题意:给定长度为n(<2e5)的数组,数组每个位置有$a_i$个数,从所有数中选三个,且不落在同一个位置的总数。做法:记数组和为sum, 答案为 fac3(sum) - \sum_i (fac3(a_i)), 函数fac3(x) = C(x, 3)。时间复杂度O(n)第二题题意:数字符子串,包含byte和dance的字串总数。做法:遍历一遍即可,维护一下左端起始点pos,初始值为0,当当前位置i开始能够能构成byte或者dance时,pos更新为i + 1。时间复杂度O(n)。第三题题意:给定一个数组,其用n(<1e5)段(x_i, y_i)表示连续出现y_i个值为x_i的数,比如((6, 2), (1,3))表示 数组[6,6,1,1,1]。给定q个区间(p, q)求区间和。做法:前缀和。维护一下y_i的前缀和,二分查找,以及所有数的前缀和。时间复杂 O(qlogn + n)第四题题意:给定一个n*m (n < 6, m<1000)矩阵,其中值为0,1,或者?,?表示0或者1,总共有多少矩阵数量满足没有相邻的两个数为1。做法:矩阵竖的看,看数据范围为二进制枚举,+动态规划一下,时间复杂度O(4^n * m *n),直接循环套循环了,所以写的变成了2^n * 2^n,可能时间复杂度可以压到O(2^n * m *n),可能写递归能压到O(2^n * m)。
投递字节跳动等公司10个岗位 软件开发2024笔面经
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客企业服务