【笔试刷题】拼多多-2026.04.12-改编真题

✅ 春招备战指南 ✅

💡 学习建议:

  • 先尝试独立解题
  • 对照解析查漏补缺

🧸 题面描述背景等均已深度改编,做法和题目本质基本保持一致。

🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力

🤖 内容包含AI辅助生成,题解和代码均经过多轮验证,有问题欢迎评论

🌸 目前本专栏已经上线200+套真题改编解析,后续会持续更新的

春秋招笔试机考招合集 -> 互联网必备刷题宝典🔗

拼多多-2026.04.12

题目总览

题号 题名 主要做法 难度
1 赛道计时 差分统计 简单
2 站位安排 二分答案 中等
3 能源回收 前缀和 + 双向枚举 困难
4 魔法树水晶 树上 DAG 动态规划 困难

这套拼多多前两题比较像常规机考节奏,后两题明显更考建模。第三题要把来回折返的代价整理清楚,第四题则要把树上的大小约束转成稳定的转移关系。

1. 小兰的赛道计时

问题描述

小兰来到一座特殊的赛车场。这里一共有 条平行赛道,每条赛道的总长度都是 米。

整条赛道会被切成 段长度为 的小段,从起点开始依次编号为第 段到第 段。
段中,只有赛道编号落在区间 内的赛道铺设了水泥路面,其余赛道在这一段都是泥地。

赛车在两种路面上的速度不同:

  • 水泥地: 米每秒
  • 泥地: 米每秒

小兰可以任选一条赛道起跑,并且一旦选定赛道,途中不能变道。
她想让到达终点的总时间尽量短;如果有多条赛道都能达到最短时间,则选择编号最小的那一条。

请输出最短用时以及对应的赛道编号。

输入格式

第一行输入两个整数 ,表示赛道条数和每条赛道的长度。

接下来 行,第 行输入两个整数 ,表示第 段中铺设水泥地的赛道编号范围。

输出格式

输出一行两个整数,分别表示最短时间和对应的赛道编号。

样例输入

3 2
1 2
2 3

样例输出

2 2

数据范围

样例说明

  • 样例1:第 条赛道经过 段水泥地和 段泥地,总时间是 。第 条赛道两段都是水泥地,总时间是 。第 条赛道同样是 秒,所以答案是 2 2

题解

一条赛道的总长度固定都是 ,所以真正影响时间的,只有它经过了多少段水泥地。

设某条赛道经过了 段水泥地,那么:

  • 段每段耗时
  • 剩下的 段每段耗时

于是总时间就是:

也就是说,总时间越短,等价于该赛道经过的水泥段数越多。

因此问题变成:

  • 对每条赛道,统计它被多少个区间 覆盖
  • 找到覆盖次数最大的赛道
  • 若有并列,取编号最小的赛道

这正好可以用差分数组完成。

对于每个区间

  • diff[l_i] += 1
  • diff[r_i + 1] -= 1

然后做一次前缀和,就能得到每条赛道的水泥段数量。

设最大覆盖次数为 best,对应的最小赛道编号为 pos,那么答案就是:

复杂度分析

  • 时间复杂度:
  • 空间复杂度:

参考代码(Python)

import sys

input = lambda: sys.stdin.readline().strip()


def solve() -> None:
    # Read input in ACM mode and build the answer directly.
    n, m = map(int, input().split())
    diff = [0] * (n + 3)

    for _ in range(m):
        l, r = map(int, input().split())
        diff[l] += 1
        diff[r + 1] -= 1

    cur = 0
    best = -1
    pos = 1
    for i in range(1, n + 1):
        cur += diff[i]
        if cur > best:
            best = cur
            pos = i

    print(2 * m - best, pos)


if __name__ == "__main__":
    # Standard ACM entry.
    solve()

2. 小兰的站位安排

问题描述

小兰正在安排一场演出的站位。舞台上一共有 个可用站位,第 个站位的坐标为

现在有 位表演者需要上台,且必须恰好选择 个站位给他们使用。
为了避免站得太近造成舞台效果互相干扰,小兰 把一套安排方案的稳定程度定义为:

  • 任意两名表演者之间距离的最小值

请你求出,这个最小值最大可以达到多少。

输入格式

第一行输入一个整数 ,表示测试数据组数。

对于每组测试数据:

  • 第一行输入两个整数
  • 第二行输入 个整数

输出格式

对于每组数据输出一行,一个整数,表示最大化后的最小距离。

样例输入

1
3 2
1 6 8
1
6 4
24 3 42 15 7 30
1
5 3
10000 10 20000 1 19999

样例输出

7
12
9999

数据范围

题解

这是一个很典型的“最大化最小值”问题。

如果我们猜一个答案 d,问题就变成:

  • 能不能从这些站位里选出
  • 使得任意相邻已选站位之间的距离都至少为 d

这个判定是容易做的。

先把所有站位坐标排序。
然后贪心地从左到右选:

  • 先选最左边的站位
  • 之后每次尽量选“与上一个已选站位距离至少为 d 的最左站位”

如果最终能选出至少 个站位,说明这个 d 可行;否则不可行。

为什么这样贪心是对的?

  • 对于固定的最小距离要求 d,每次尽量选更靠左的位置,只会给后面留下更多可选空间
  • 因此它是判定可行性的最优策略

于是答案具有单调性:

  • d 可行,则所有更小的距离也都可行
  • d 不可行,则所有更大的距离也都不可能可行

所以可以在答案区间上二分。

复杂度分析

设单组数据有 个站位。

  • 排序复杂度:
  • 每次判定复杂度:
  • 二分次数:

总复杂度为

参考代码(Python)

import sys

input = lambda: sys.stdin.readline().strip()


def can_place(pos, need, dist):
    count = 1
    last = pos[0]
    for x in pos[1:]:
        if x - last >= dist:
            count += 1
            last = x
            if count >= need:
                return True
    return False


def solve() -> None:
    # Read input in ACM mode and build the answer directly.
    t = int(input())
    out = []
    for _ in range(t):
        k, n

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

互联网刷题笔试宝典 文章被收录于专栏

互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力

全部评论
谢谢楼主 招聘季很实用
点赞 回复 分享
发布于 04-14 04:12 美国

相关推荐

04-15 09:12
门头沟学院 Java
现在网上有个很可笑的论调:“AI 都能写代码了,程序员不用刷算法了,不用学数据结构了,会调 API 就行。”说这种话的人,要么根本不是程序员,要么根本没在真实的业务里踩过坑。AI 时代,刷 LeetCode 的意义,早就不只是为了过面试了。它真正的价值,是帮你建立底层的算法思维和逻辑能力,而这,恰恰是你能不能驾驭 AI,而不是被 AI 替代的核心。AI 给了一段代码,跑是能跑,但他根本看不懂里面的时间复杂度,上线后数据量一大,接口直接超时,数据库直接崩了;AI 写的递归函数,他直接复制粘贴用,结果线上数据量大了直接栈溢出,他连递归和迭代的区别都搞不懂,更别说排查问题了;业务里要做一个用户标签的匹配功能,AI 给了好几种方案,他根本不知道选哪种,不知道哈希表和红黑树的适用场景,最后选了个性能最差的,线上出了故障背了大锅;甚至 AI 写的代码里有边界漏洞,他都看不出来,上线后被恶意攻击,造成了数据泄露,最后被公司开除。这些人,本质上不是在用 AI,是被 AI 当成了执行工具。他们就像拿着枪的小孩,根本不知道枪的原理,也不知道扣动扳机的后果,最后伤的只能是自己。而刷 LeetCode,练的从来不是你会不会写那一道题,是这 4 种 AI 永远替不了的核心能力:复杂度直觉:知道什么代码是好的,什么是垃圾刷算法题最核心的训练,就是时间 / 空间复杂度的分析能力。刷多了,你看到一段代码,一眼就能知道它的性能瓶颈在哪,会不会在高并发场景下出问题,能不能优化。AI 能给你 10 种实现方案,但只有你能判断,哪种方案适合当前的业务场景,哪种方案能扛住线上的流量,哪种方案会给未来埋坑。没有这种复杂度直觉,你只会在 AI 给的一堆方案里,选一个最烂的。问题拆解能力:把复杂问题拆成可解决的小问题一道中等难度的算法题,本质上就是一个微型的业务问题。刷算法的过程,就是训练你把一个复杂的、模糊的问题,拆解成多个简单的、可解决的小问题,一步步推进,最终得到结果。这恰恰是程序员最核心的能力。业务里的需求,永远是复杂的、模糊的,AI 能帮你写代码,但不能帮你做需求拆解、架构设计。没有这种拆解能力,你连给 AI 提需求都提不明白,只会让 AI 生成一堆没用的垃圾代码。边界思维:预判所有的异常情况刷过算法题的人都知道,一道题能不能 AC,不只看核心逻辑能不能跑通,更看你有没有考虑到所有的边界条件:空值、极值、异常输入、并发场景……真实的业务开发,80% 的 bug 都来自边界情况。AI 生成的代码,往往只覆盖了核心的正常流程,很少考虑到业务里的各种异常边界。没有这种边界思维,你连 AI 代码里的漏洞都看不出来,线上出 bug 是迟早的事。逻辑严谨性:写出来的代码,每一行都有道理刷算法题的过程,就是训练你严谨的逻辑思维。每一行代码,都要有它的作用,每一个判断,都要有它的依据,不能有任何逻辑漏洞。现在很多人用 AI 写代码,代码跑通了就万事大吉,根本不知道里面的逻辑是什么,出了问题根本不知道怎么排查。而有算法思维的人,哪怕是 AI 写的代码,也能一眼看透逻辑,快速定位问题,甚至优化得更好。我从来不是反对用 AI,恰恰相反,我每天都在用 AI 写代码、改 bug、做方案,它帮我节省了大量的重复劳动时间。但我始终坚信:AI 是放大器,不是替代品。它能放大强者的能力,也能加速弱者的淘汰。你有扎实的算法思维、逻辑能力,AI 就是你的神兵利器,能让你的效率翻倍,能让你专注在更有价值的架构设计、业务思考上;你没有这些底层能力,AI 只会让你越来越懒,越来越依赖,最后彻底丧失独立思考、独立写代码、独立解决问题的能力,变成一个只会调 AI 的 “工具人”,随时都能被替代。回到最初的问题:AI 时代还有必要刷 LeetCode 吗?我的答案是:非常有必要。但不是为了应付面试死记硬背,是为了训练自己的底层思维能力,让自己能真正驾驭 AI,而不是被 AI 淘汰。毕竟,程序员的核心竞争力,从来不是你能写多少行代码,而是你能解决多复杂的问题。而这,永远是 AI 替不了你的。
AI时代还有必要刷lee...
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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