拼多多暑期实习笔试分享

免责声明:以下内容是我语音输入,让我的 ChatGPT 总结整理的题解思路,仅做简单复盘分享,可能存在理解偏差。

下面先给出四道题 相对标准化的题干描述

如果你只是想练习,可以先只看题干部分,不要往下翻题解。

题目一:主播排序

给定 N 个直播片段,每个片段包含以下信息:

  • uid:主播编号
  • A:指标 A(越大越好)
  • B:指标 B(越大越好)
  • T:时间(越早越好)
  • index:输入顺序(越早越好)

排序规则如下:

  1. A 越大越好
  2. 若 A 相同,则 B 越大越好
  3. 若 A,B 相同,则 T 越早越好
  4. 若 A,B,T 都相同,则 index 越小越好

现在需要:

  1. 对于每个主播,只保留其 最优的一个直播片段
  2. 使用每个主播的最优片段对 主播进行排序
  3. 有 Q 个查询,每个查询给出一个直播片段编号 x

输出规则:

  • 如果 x 不是该主播的最优片段,输出 0
  • 如果 x 是该主播的最优片段,输出该主播的排名

题目二:电动车充电最小费用

一辆电动车需要行驶总距离 L

给定:

  • 电池容量 C(最多能行驶 C 公里)
  • 路上有若干充电站
  • 每个充电站包含:位置 x每公里电量价格 p

电动车每行驶 1 公里消耗 1 单位电量。

车辆可以在任意充电站购买电量,但电池容量不能超过 C

目标:

求从起点到终点的最小花费。

如果无法到达终点,输出 -1

题目三:删除子串达到目标位置

给定一个长度为 N 的字符串 S,字符集合为:

U D L R

分别表示二维平面上的四个方向移动。

(0,0) 出发,根据字符串进行移动。

现在允许执行一次操作:

删除一个连续子串(也可以不删除)。

给定目标坐标 (tx, ty)

问题:

是否可以通过删除一个连续子串,使得最终位置变为 (tx, ty)

(某些版本题目可能要求输出最短删除长度。)

题目四:资源包容量最小化

给定两个数组:

A[i] = 第 i 个时段的需求
B[i] = 第 i 个时段的原始容量

系统允许使用最多 M 个资源包。

每个资源包具有:

  • 容量 x
  • 持续 W 个时段

如果在某个时段开启资源包,则该资源包会影响区间:

[i , i+W-1]

目标:

找到 最小资源包容量 x,使得所有时段满足:

B[i] + 资源包贡献 ≥ A[i]

如果存在解:

输出:

最小资源包容量 x
使用的资源包数量

如果不存在解,输出 -1

题解部分(以下开始剧透)

题目一题解

这题本质是 分组取最优 + 多维排序

第一步,遍历所有直播片段,对每个主播维护一个当前最优片段。

比较规则完全按照题目给定的排序规则。

第二步,每个主播只保留这个最优片段。

把所有主播的最优片段拿出来,再按同样的排序规则排序。

第三步,排序完成后即可得到主播排名。

处理查询时:

  • 如果查询片段不是该主播最优片段,输出 0
  • 如果是最优片段,输出该主播排名

整体思路就是:

每组取代表元素 → 用代表元素排序 → 查询时判断是否为代表元素。

题目二题解

这题是经典的 贪心问题(最小加油费用模型)

在某个充电站 i 时,需要决定买多少电。

关键观察:

只需要看 电池可达范围内是否存在更便宜的充电站

如果在当前站点可达范围内存在一个更便宜的站点:

  • 只需要买 刚好能到达该站点的电量

如果在可达范围内没有更便宜的站:

  • 在当前站 充满电池

然后一路模拟到终点即可。

关键点在于:

寻找的是“第一个更便宜的站”,而不是范围内最低价的站。

题目三题解

这题可以转化为 子数组和问题

设整条路径的位移为:

S

目标位移为:

T

如果删除的子串位移为:

sub

则删除后剩余路径满足:

S - sub = T

整理得到:

sub = S - T

因此问题转化为:

是否存在一个连续子串,其位移等于 S - T

可以使用 前缀和 + 哈希表

  • pre[i] 表示前 i 个字符的位移
  • 子串 [l+1 ... i] 的位移为 pre[i] - pre[l]

遍历 i 时检查是否存在某个 l 使得:

pre[i] - pre[l] = target

如果存在,则说明可以删除该子串。

题目四题解

这题是典型的 二分答案 + 贪心判定

首先观察到:

如果某个资源包容量 x 可以满足需求,那么任何更大的 x 也一定可以满足。

因此可以 二分最小的可行 x

关键是实现判定函数 check(x)

从左到右扫描每个时段,维护当前资源包带来的总容量贡献。

如果在某个时段:

B[i] + 当前贡献 < A[i]

说明容量不足,需要新开资源包。

设缺口为:

need = A[i] - (B[i] + 当前贡献)

每个资源包贡献 x,因此需要开:

ceil(need / x)

个资源包。

这些资源包会影响接下来 W 个时段,因此可以用 差分数组 来维护贡献范围。

扫描过程中统计使用资源包总数,如果超过 M,则当前 x 不可行。

通过二分搜索找到最小可行 x 即可。

总结

四道题分别对应四个经典算法模型:

主播排序

分组取最优 + 多维排序

电动车充电

贪心

删除子串路径

前缀和 + 哈希

资源包容量

二分答案 + 贪心

整体特点是:

  • 模型识别比复杂实现更重要
  • 题目本身算法难度不高,但需要快速抽象问题结构
#暑期##拼多多##笔试##拼多多集团-PDD笔试#
全部评论

相关推荐

03-15 18:04
已编辑
西安交通大学 Java
我是菜鸡。4道题一道都没有全对,0.95&nbsp;&nbsp;0.4&nbsp;&nbsp;0.975&nbsp;&nbsp;0.95&nbsp;&nbsp;与大厂无缘了不愧是拼都督,笔试都能感觉到卷了--------第二题的屎山代码import&nbsp;java.util.*;import&nbsp;java.io.*;public&nbsp;class&nbsp;Main{public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;throws&nbsp;InterruptedException&nbsp;{Scanner&nbsp;sc=new&nbsp;Scanner(new&nbsp;BufferedInputStream(System.in));PrintWriter&nbsp;out=new&nbsp;PrintWriter(new&nbsp;BufferedOutputStream(System.out));int&nbsp;L=sc.nextInt(),C=sc.nextInt(),n=sc.nextInt();int[]ds=new&nbsp;int[n+1];int[]ps=new&nbsp;int[n+1];for(int&nbsp;i=0;i&lt;n;i++){ds[i]=sc.nextInt();ps[i]=sc.nextInt();}ds[n]=L;ArrayDeque&lt;Integer&gt;w=new&nbsp;ArrayDeque&lt;&gt;();int&nbsp;next=C;int&nbsp;start=-1;int&nbsp;startC=C;long&nbsp;cost=0;boolean&nbsp;stop=false;for(int&nbsp;i=0;i&lt;=n;i++){if(next&gt;=ds[i]){while(!w.isEmpty()&amp;&amp;ps[w.getLast()]&gt;=ps[i])w.removeLast();w.addLast(i);}else{int&nbsp;need=ds[i]-next;while(!w.isEmpty()&amp;&amp;need&gt;0){int&nbsp;idx=w.getFirst();int&nbsp;space=(C-startC)+(ds[idx]-(start==-1?0:ds[start]));//&nbsp;可以加的油=邮箱中剩余的空间=起点时邮箱不满的空间+从起点走到这里花的油if(space&lt;=need){need-=space;next+=space;cost+=(long)space*ps[idx];startC=C;start=idx;w.removeFirst();}else{start=idx;startC=C-space+need;next+=need;cost+=(long)need*ps[idx];need=0;}}if(need&gt;0){stop=true;break;}i--;&nbsp;//&nbsp;这时候反悔加了油,但是当前的i处的加油站还没有加进来,再来一轮}}if(stop)out.println(-1);else&nbsp;out.println(cost);out.flush();out.close();sc.close();}}只记得样例1了20&nbsp;10&nbsp;34&nbsp;59&nbsp;215&nbsp;6输出为24
牛客14272363...:不知道你们怎么做的,我前两道题都自定义了一个类然后实现了comparable,一写出这个就感觉特别清晰了,前两题全ac,后面两道题感觉是贪心,二分,前缀和的经典运用
拼多多集团-PDD笔试
点赞 评论 收藏
分享
评论
5
18
分享

创作者周榜

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