拼多多 笔试

岗位:大模型算法
四道编程  做了三道  第四道两眼一黑
第一题:有一辆货车,途径N个站点,车上初始货物量为initiaWeight,最大限额是maxWeight,每个站点要么装货(整数),如果装货之后大于最大限额就是危险了,比如说你现在车上6个,这一站要装4个,最大是9,6+4>9就不行,但是等于9是可以的,要么卸货(负数),如果目前装在的货物小于卸货要求,直接全部卸下,就是比如说你现在车上3个货物,这一站要写下来4个(-4),3-4=-1嘛不是,但是不可能没有硬卸,变为0就行,问你在安全装载状态下最长能连续经过几个站点
非常简单的题,一遍96%,就没看了,直接下一道了

第二道:
有n门课,每门课有一个先修课,比如说2的先修课是1,那修完1才能修2,给你n门课的先修课序列,问你修完n门课要几学期,举个栗子:
5门课  -1 1 2 1 -1(-1表示没有先修课)
下标: A B C D E (为了不弄混,我先用字母表示)
这个就是需要三个学期,第一学期:A和E,第二学期:B和D,第三学期:C
这道题,怎么说呢,看到先修课我以为是输出拓扑排序,昨天才笔了一样的,结果写到一半发现不对,然后又重新写,然后这个序列是从1开始的,这个又浪费我好几轮,然后还有一开始理解错了,我以为序列是先修课有几个,比如说这个2,我本来以为是C的先修课有两个,我心想,那不就是3吗?选最大的+1得了呗,过了80%,我都傻了,后来发现我写的逻辑完全不是人家说的,最后是用了一个数组,先初始化为0 ,然后遍历,比如说A不需要先修课,那就是0,然后B要先修A,就是0(A的先修)+1,C要先修B,那就是1(B的先修)+1,这样
然后遍历数组找到麻小,输出max+1
应该是很简单的题,我先入为主浪费好多时间,最后是100%

第三题
有N个奖品,价值为vi,有俩包,一个物品只能放进一个包里,然后一个包里的奖品就,任意两个之间的价值差不能超过T,问你最多俩包能装多少奖品
我用的最笨的方法——暴力  但是可能我的逻辑写的不对,只有15%
然后换了一种

N=6  T=3
vi: 5 4 2 1 8 10
先sort排序——1 2 4 5 8 10
算从1开始,一个包能装多少,那就是 1 2 4,下标就是0 1 2,用了一个end数组,end[0]=2——记录从下表为0的奖品开始,能装的最后一个奖品的下标
end[0]=2 —— 一个包能装3个  包1
end[1]=3 —— 一个包能装3个  包2
end[2]=3 —— 2个  包3
end[3]=4 —— 2个  包4
end[4]=5 —— 2个   包5
end[5]=5 —— 1个  包6
如果我选了包1,那么保证一个奖品不能出现在同一个包里,包2和3就不能选,然后选剩下包里最多的,这就是从奖品0开始装,最多能装多少,然后取最大
有点饶了,我比较菜,正能想到这个方法了,只有60%

第四题
一笔画,且点不重复的情况下,在一幅图里最多从起到回到起点,最多一笔画能包含几个点
手画个图,凑活看吧
题目是说要city walk,实线是主干道,虚线是小路(P1),然后让你规划路线,答案是P2

#拼多多集团-PDD笔试#
全部评论
27届实习机会或看我住业 https://careers.pddglobalhr.com/campus/intern?t=4OmKPVeX9a
1 回复 分享
发布于 昨天 22:38 上海
第三题我先对v数组排序,然后用一个两层的循环去维护一个数组arr,arr[i]代表以第i个物品为起点,一个背包最多塞几个物品,因为排过序所以很好找,只要遍历到第j个元素满足vj-vi>t就arr[i]=j-i,然后break,以此类推。然后下面再用两层循环更新答案,第一层循环表示第一个框的起点,第二层循环表示第二个框的起点,第一层循环是i=0开头,第二层循环是j=i+arr[i]开头,ans和arr[i]+arr[j]的和比大小,选择大的更新答案。最后考虑一个背包就能装下所有物品的特殊案例就能AC
点赞 回复 分享
发布于 昨天 20:14 广东

相关推荐

点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务