牛客lulu level
获赞
136
粉丝
21
关注
8
看过 TA
652
上海交通大学
2025
C++
IP属地:上海
暂未填写个人简介
私信
关注
09-24 11:43
已编辑
上海交通大学 C++
#字节求职进展汇总#1. 给一个树,若存在边(u,w)和(w,v),则可以添加一条边(u,v),求最多可以添加多少边针对每个节点u,计算与其相连的边数sz,则可以添加 sz*(sz-1)/2,O(n)2. 有一个长为n的数组ai,每次询问[l, r],求所有长度大于等于l小于等于r的子数组之和最大值(注意快读)首先暴力求解所有长为x的子数组之和的最大值,然后维护mx[i][j]表示长度大于等于i小于等于j的子数组之和最大值,后续O(1)查找。总的时间复杂度O(n^2+q)3. 有一个长为n的字符串s,每次可以将si按照字母表的顺序循环右移一位(即a->b, z->a)求使字符串相邻字符都不相等的最小操作数考虑dp。dp[i][j]表示前i个字符满足条件且第i个字符为j时的最小操作次数,对于第i+1个字符遍历a-z(k=0-26),计算操作次数(v=(k+26-s[i+1]+'a')%26)并进行状态更新dp[i+1][k]。时间复杂度O(26*26n)优化:对于dp[i]在计算dp[i+1][k]时,只需要记录dp[i]内最小值及对应字符和次小值即可,若k=最小值对应字符,则用次小值更新dp[i+1][k],否则直接用最小值更新;同时,k也可以只考虑dp[i]内最小值对应字符,以及除此之外s[i+1]右移操作最少的字符,可以将复杂度降到O(2n)4. 有一个长为n的数组ai,求有多少个严格单调递减的子序列,对10^9+7取余经典的离散化+树状数组问题。将每个ai按大小映射到1-m(记作bi),用树状数组维护以j结尾的子序列个数的前缀和,总的减掉就是以大于j结尾的子序列个数,类似lc315
投递字节跳动等公司10个岗位 字节求职进展汇总
0 点赞 评论 收藏
分享
09-24 11:40
已编辑
上海交通大学 C++
1. 给n个仅包含大写字母的字符串,对其排序,包含PDD的排在不包含PDD的前面,其余的按字典序,输出前m个。比较简单,按照给定规则排序即可。    2. 有n个数字,从中删除两个数字使得数组的平均值不变,输出方案个数。计算数组的和sum,需要保证sum * 2 % n == 0,从而删除的数字之和为sum * 2 / n,转换成两数之和问题。3. 给长度为n的数组ai,判断是否可以构建另一个长度为n的数组bi,使得对任意ai,都存在ai = bj - bk,1数学题。结论是数组a中必须要保证两个不同子序列的和相同,之后暴力遍历a中的子序列,求和,并记录在哈希表中判断即可。O(n2^n)4. 第i时刻汉堡的价格为pi,所购买的汉堡价格可以对应转换为积分,若积分大于等于100,自动转换为一张汉堡券,时限为3天(若第1天获得汉堡券,可以在第2、3、4天使用),求获得所有汉堡需要花费的最小金额。考虑dp。将券的状态记为j,剩余积分记为k,其中j为历史三天是否获得优惠券(若j=6=0b110,表示i-1、i-2天获得了优惠券),dp[i][j][k]表示第i天后券为j剩余积分为k所需要花费的最小金额。对于每个dp[i-1][j][k],判断是否有券可以在下一时刻使用(j!=0),并计算下一时刻是否使用券的情况下,后续的状态,从而能够转移到dp[i][new j][new k]。O(800n)具体而言: if (j & 1) dp[i][(j-1)>>1][k] = min(dp[i][(j-1)>>1][k], dp[i-1][j][k]) else if (j & 2) dp[i][(j-2)>>1][k] = min(dp[i][(j-2)>>1][k], dp[i-1][j][k]) else if (j & 4) dp[i][(j-4)>>1][k] = min(dp[i][(j-4)>>1][k], dp[i-1][j][k]) dp[i][j>>1|(k+p[i])/100*4][(k+p[i])%100] = min(dp[i][j>>1|(k+p[i])/100*4][(k+p[i])%100], dp[i-1][j][k] + p[i])#拼多多##软件开发2024笔面经##软件开发笔面经##拼多多笔试#
投递拼多多集团-PDD等公司10个岗位 软件开发2024笔面经 软件开发笔面经
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务