【笔试刷题】团子-2026.04.18-研发岗-改编真题

✅ 春招备战指南 ✅

💡 学习建议:

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

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

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

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

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

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

团子-2026.04.18-研发岗

1. 小兰的批量清洗保留表

问题描述

小兰在整理一张长度为 的记录表,表中的第 项权值为

他会连续进行 轮清洗。每一轮都执行下面的规则:

  • 删除当前表中权值最小的一项;
  • 如果最小值出现了多次,就删掉其中位置最靠前的那一项。

清洗结束后,剩余记录的相对顺序保持不变。请输出最后留下来的序列。

输入格式

每个测试文件包含多组数据。

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

对于每组数据:

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

输出格式

对于每组数据,输出一行,表示完成 轮清洗后的序列。

剩余元素之间用一个空格分隔。

样例输入

3
5 2
3 1 4 1 5
3 0
1 2 3
5 4
5 4 3 2 1

样例输出

3 4 5
1 2 3
5

样例说明

  • 第一组里,两个最小值都是 ,要先删位置更靠前的那个,再删另一个 ,最后剩下 3 4 5
  • 第二组不需要清洗,原序列直接保留。
  • 第三组删掉前四轮最小值后,只剩下最大的 5

数据范围

  • 单个测试文件中所有 的总和不超过

题解

每一轮删掉的其实就是当前还没被删掉的最小二元组

这里的真正要抓的是:

  • 比较优先级先看值
  • 值相同的时候再看下标 ,下标小的会更早被删。

所以完全没必要真的删 次。把所有位置写成二元组 后整体排一次序,排在最前面的 个位置,就是最终会被删掉的那 项。

拿到这 个下标以后,再按原顺序扫一遍数组,把没被标记的位置输出出来即可。

复杂度分析

  • 排序复杂度是
  • 标记和输出都是线性复杂度。
  • 因此单组总复杂度为 ,可以通过数据范围。

参考代码(Python)

import sys

def input() -> str:
    return sys.stdin.readline().strip()

def solve() -> None:
    t = int(input())
    out = []

    for _ in range(t):
        n, m = map(int, input().split())
        arr = list(map(int, input().split()))

        # 把每个元素写成 (值, 原下标)。
        # 排序后最前面的 m 个位置,就是最终会被清洗掉的记录。
        ords = [(arr[i], i) for i in range(n)]
        ords.sort()

        removed = [False] * n
        for k in range(m):
            removed[ords[k][1]] = True

        # 剩余元素的相对顺序不变,按原数组顺序输出即可。
        cur = []
        for i, x in enumerate(arr):
            if not removed[i]:
                cur.append(str(x))
        out.append(" ".join(cur))

    print("\n".join(out))

if __name__ == "__main__":
    solve()

2. 小兰的半径覆盖表

问题描述

平面上有 个整点,编号为

对任意两个不同的编号 ,以点 为支点,把线段 绕着点 旋转一整圈。这样扫过的区域,正好是一个以点 为圆心、以点 到点 的距离为半径的闭圆盘。

为这个圆盘里包含的其他点数,要求:

  • 自己不计入;
  • 也不计入;
  • 其余编号不同的点,只要落在这个圆盘内就计入答案;
  • 特别地,

请输出整个 的答案矩阵。

输入格式

每个测试文件包含多组数据。

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

对于每组数据:

  • 第一行输入一个整数 ,表示点的数量;
  • 接下来 行,每行输入两个整数 ,表示一个点的坐标。

输出格式

对于每组数据输出 行。

行输出 个整数,依次表示

样例输入

2
3
1 1
2 1
1 2
4
1 1
2 1
3 1
4 1

样例输出

0 1 1
0 0 1
0 1 0
0 0 1 2
1 0 1 2
2 1 0 1
2 1 0 0

数据范围

  • 单个测试文件中所有 的总和不超过

样例说明

样例 解释说明
以点 为圆心时,点 和点 到圆心的距离都等于 。所以无论半径取到点 还是点 ,另一个点也会被圈进去,答案都是
四个点都在一条直线上。以最左侧点为圆心时,半径越大,能覆盖到的其他点数也越多,因此最后一个位置会得到

题解

固定某个圆心 来看。

如果把其他点到点 的距离从小到大排好,那么对于某个点

  • 所有距离严格小于 的点,一定都在圆盘里;
  • 距离恰好等于 的点,也都在圆盘边界上,同样要计入。

所以, 实际上等于:

  • “距离不超过点 的那些点” 的总数量,
  • 再减去点 自己这一个。

这就变成了一道排序题。

对每个圆心

  1. 枚举所有 ,计算平方距离
  2. 按平方距离升序排序;
  3. 对于排序后的每一段“距离相同”的连续块,设它的右端点下标是
  4. 这个块里的任意一个点,答案都等于

这里使用的是从 开始的下标。因为到位置 为止一共有 个点,去掉当前这个点自己,剩下的就是 个点。

总共有 行,每一行都需要排一次长度为 的数组,所以总时间复杂度是 ,空间复杂度是

参考代码(Python)

import sys

def input() -> str:
    return sys.stdin.readline().strip()

def solve() -> None:
    t = int(input())
    out = []

    for _ in range(t):
        n = int(input())
        pts = [tuple(map(int, input().split())) for _ in range(n)]

        for i in range(n):
            cx, cy = pts[i]
            dist = []
            for j in range(n):
                if i == j:
                    continue
                dx = pts[j][0] - cx
                dy = pts[j][1] - cy
                # 只需要比较远近,保存平方距离就够了,还能避免开根号。
                dist.append((dx * dx + dy * dy, j))

            # 把其他点按“离当前圆心有多远”排序。
            dist.sort()
            row = [0] * n

            m = len(dist)
            l = 0
            while l < m:
                r = l
                while r + 1 < m and dist[r + 1][0] == dist[l][0]:
                    r += 1
                # 同一段等距离块里的点,能覆盖到的其他点数完全相同。
                for k in range(l, r + 1):
                    row[dist[k][1]] = r
                l = r + 1

            # row[j] 就是以点 i 为圆心、半径取

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

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

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

全部评论

相关推荐

【关于我们】我们是美团酒旅酒店业务的用户前端团队,负责核心用户端流程的研发,服务数亿用户的出行住宿需求。团队技术栈涵盖&nbsp;Native、MRN、Web&nbsp;等多端技术,同时深度探索端智能、性能优化、跨端复用和前端基建等前沿方向。【岗位职责】-&nbsp;参与酒店主流程(列表页/详情页/预订页等)前端开发与迭代-&nbsp;协助端性能优化、跨端复用(MRN)及前端基础设施建设-&nbsp;探索&nbsp;AI&nbsp;辅助开发,参与&nbsp;AI&nbsp;Coding&nbsp;Agent、智能代码生成等前沿方向的落地【任职要求】-&nbsp;在读本科/硕士,计算机、软件工程等相关专业优先-&nbsp;扎实前端(HTML/CSS/JS)或移动端基础,熟悉&nbsp;React/React&nbsp;Native&nbsp;优先-&nbsp;有&nbsp;AI&nbsp;开发或&nbsp;AI&nbsp;工具使用经验(如&nbsp;GitHub&nbsp;Copilot、Cursor)者优先-&nbsp;热爱技术,善于主动探索和解决问题【你将获得】-&nbsp;核心业务与技术历练:参与复杂、高价值的前端方案设计与落地-&nbsp;多元的技术方向:涉猎&nbsp;Native、MRN、Web&nbsp;等多端技术栈,以及性能优化、端智能等前沿方向-&nbsp;AI&nbsp;开发实践:深度体验&nbsp;AI&nbsp;驱动全流程研发-&nbsp;优秀实习生可直接转正【投递方式】内推码:LSQN7YS链接:https://zhaopin.meituan.com/web/campus?zp-from=hiring-campus-bole-elephant当然,想去其他部门也可以用我的二维码,可以帮忙跟踪全流程。
名企内推
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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