【笔试刷题】京东-2026.04.04-研发岗-改编真题

✅ 春招备战指南 ✅

💡 学习建议:

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

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

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

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

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

京东-2026.04.04-研发岗

这套题的分工很清楚:第一题是在乱序快照里反推二维等差偏移,重点是把“矩阵里的所有可能值”转成可排序的偏移量集合;第二题则是标准的区间覆盖型 DP,和 Strange Printer 是同一个模型。

题目一:矩阵快照校验

关键不在于枚举起点,而在于先把所有位置相对左上角的偏移量列出来。最小元素一定对应左上角,再把两边排序后一一核对即可。

难度:中等

题目二:区间批量标注

这题允许后续覆盖前面的颜色,本质就是“最少几次区间打印”。先压缩连续相同段,再做区间 DP,复杂度是

难度:中等偏上

1. 矩阵快照校验

问题描述

小基 在核对一张按固定规则生成的数值表。

这张表的大小为 。她先选定三个整数 ,然后按照下面的规则填写整张表:

  • 向下走一格时,数值增加 ,也就是
  • 向右走一格时,数值增加 ,也就是

例如,当 时,这张表是:

1 4 7
3 6 9
5 8 11

现在,小基 只记得 的值。她另外找到一个长度为 的数组 ,其中保存了这张表中的全部元素,只是顺序已经被打乱。

请你判断:是否存在某个满足规则的表,使得数组 恰好由这张表的全部元素组成。

可以证明,对于任意给定的 ,满足规则的表都是唯一的。

输入格式

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

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

对于每组数据:

  • 第一行输入三个整数
  • 第二行输入 个整数,表示被打乱后的全部元素。

输出格式

对于每组数据,如果可以构造出满足要求的数值表,输出 YES;否则输出 NO

样例输入

5
3 2 3
3 9 6 5 7 1 10 4 8
3 2 3
3 9 6 5 7 1 11 4 8
2 100 100
400 300 400 500
3 2 3
3 9 6 5 1 1 11 4 8
4 4 4
15 27 7 19 23 23 11 15 7 3 19 23 11 15 11 15

样例输出

NO
YES
YES
NO
NO

数据范围

  • 保证每组数据都给出恰好 个整数。
  • 保证单个测试文件中所有数据的 之和不超过
样例 解释说明
样例1 第一组里应当出现的 被替换成了 ,因此无法匹配出合法矩阵。
样例2 第二组正好对应左上角为 的那张 数值表,所以答案是 YES
样例3 时, 的表中本来就会出现两个 ,因此第三组依然合法。

题解

关键转化

如果左上角的值是 ,那么位置 上的元素一定是:

也就是说,整张表的所有元素都可以看成:

  • 一个固定起点
  • 再加上一组只由 决定的偏移量

于是题目变成了:

  1. 先把所有偏移量 列出来。
  2. 再判断数组 是否能写成“某个起点 + 这组偏移量”。

为什么最小值就能确定左上角

因为题目保证 ,所以偏移量的最小值一定是 ,对应左上角位置。

因此,把数组 排序后,最小元素一定就是候选的
接下来只需要把:

  • 所有偏移量排序
  • 数组 排序

然后逐个比较:

只要有一个位置不相等,就说明这组数据不可能来自某张合法矩阵。

做法

对每组数据执行下面几步:

  1. 读入全部 个数。
  2. 枚举所有位置,生成 个偏移量。
  3. 分别排序偏移量数组和输入数组。
  4. 令最小输入值作为候选左上角。
  5. 逐个检查两边是否完全对应。

复杂度分析

设当前测试的矩阵大小为

  • 生成偏移量:
  • 两次排序:
  • 逐项比较:

所以单组数据的总时间复杂度是 ,空间复杂度是

参考代码

  • Python
import sys

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


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

    for _ in range(t):
        n, c, d = map(int, input().split())

        need = n * n
        b = []
        while len(b) < need:
            b.extend(map(int, input().split()))

        off = []
        for i in range(n):
            base = i * c
            for j in range(n):
                off.append(base + j * d)

        b.sort()
        off.sort()
        a00 = b[0]

        ok = True
        for x, y in zip(b, off):
            if x != a00 + y:
                ok = False
                break

        ans.append("YES" if ok else "NO")

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


if __name__ == "__main__":
    solve()
  • Cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t;
    cin >> t;
    while (t--) {
        int n;
        long long c, d;
        cin >> n >> c >> d;

        int m = n * n;
        vector<long long> b(m), off;
        off.reserve(m);

        for (int i = 0; i < m; ++i) {
            cin >> b[i];
        }

        for (int i = 0; i < n; ++i) {
            long long base = 1LL * i * c;
            for (int j = 0; j < n; ++j) {
                off.push_back(base + 1LL * j * d);
            }
        }

        sort(b.begin(), b.end());
        sort(off.begin(), off.end());

        long long a00 = b[0];
        bool ok = true;
        for (int i = 0; i < m; ++i) {
            if (b[i] != a00 + off[i]) {
                ok = false;
                break;
            }
        }

        cout << (ok ? "YES" : "NO") << '\n';
    }
    return 0;
}
  • Java
import java.io.BufferedInputStream;
import java.io.IOException;
import java.util.Arrays;

public class Main {
    static class FastScanner {
        private final BufferedInputStream in = new BufferedInputStream(System.in);
        private final byte[] buf = new byte[1 << 16];
        private int len = 0;
        private int ptr = 0;

        private int read() throws IOException {
            if (ptr >= len) {
                len = in.read(buf);
                ptr = 0;
                if (len <= 0) {
                    return -1;
                }
            }
            return buf[ptr++];
        }

        long nextLong() throws IOException {
            int c;
            do {
                c = read();
            } while (c <= ' ' && c != -1);

            long sign = 1;
            if (c == '-') {
                sign = -1;
                c = read();
            }

            long val = 0;
            while (c > ' ') {
                val = val * 10 + c - '0';
                c = read();
            }
            return val * sign;
        }
    }

    public static void main(String[] arg

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

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

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

全部评论

相关推荐

“在吗?”“您好,请问这个岗位还招人吗?”“我投了简历,麻烦看一下”,这些话是不是你每次找HR的开场白?可发出的消息要么石沉大海,要么只得到一句敷衍的回复,陷入漫长的等待,尤其在金三银四、春招暑实的关键期,HR的一次无视,可能就意味着错失一个宝贵的面试机会。很多人觉得是HR高冷、岗位已招满,实则是你的沟通方式踩了雷,没能抓住HR的注意力。招聘旺季,HR日均要筛上百份简历、回复几十条消息,时间被极度压缩,无价值、无重点、无亮点的“三无消息”,只会被直接划走。到底怎么说才能让HR秒回?我从HR核心诉求、求职者实操、避坑进阶三个不同角度,把沟通逻辑、万能神文案、实战技巧全盘托出,帮你彻底告别求职冷暴力。角度一:站在HR视角,搞懂HR到底想看到什么想让HR秒回,首先要换位思考,明白HR的工作核心和沟通痛点,而不是自顾自地发消息。HR每天的工作是快速匹配合适候选人、高效完成招聘任务,他们没有时间和精力去猜测你的意图、挖掘你的优势,只有符合他们需求的消息,才能第一时间得到回应。HR最反感的三类消息,一定要避开:一是无意义问候,“在吗”“您好”这类开场白,没有任何有效信息,HR根本不知道你要做什么,直接忽略;二是信息模糊,只说找工作、问岗位,不透露姓名、应聘岗位、个人优势,HR无法判断你是否匹配,索性不回复;三是长篇大论,发小作文介绍自己、吐槽求职经历,HR没时间细看,直接划走。反过来,HR一眼就会注意、愿意秒回的消息,都具备三个特点:信息完整、直奔主题、凸显匹配度。短短一句话,包含姓名、应聘岗位、核心优势、沟通目的,让HR3秒就能判断你是潜在候选人,回复你就是在高效完成招聘工作,自然不会拖延。HR的核心需求从来不是“被礼貌问候”,而是“节省招聘时间、找到合适的人”,你的消息越能满足这个需求,被秒回的概率就越高。这也是为什么同样是求职沟通,有人发一句就得到回应,有人发十条都无人理会,差距从来不在态度,而在方法。角度二:求职者实操视角,5类万能神文案,直接复制秒回结合不同求职场景,整理出5类可直接复制粘贴的神文案,覆盖投递咨询、进度追问、主动自荐、面试跟进、应届生破冰,每一句都贴合HR沟通习惯,亲测90%以上的HR会秒回,不用费心琢磨,直接套用即可。1.&nbsp;简历投递后,咨询审核进度(最常用)HR您好,我是XXX,于X月X日投递贵司【XX岗位】,简历已针对岗位JD优化,具备【核心技能,如文案撰写、活动执行、数据整理】相关经验,麻烦您抽空查看,期待回复,感谢~2.&nbsp;主动毛遂自荐,心仪岗位未投递HR您好,关注贵司【XX岗位】许久,我有X年相关实习/工作经验,擅长【岗位核心能力】,可快速上手岗位工作,简历已备好,请问岗位目前还在招聘吗?3.&nbsp;简历长期未读,温和提醒不反感HR您好,打扰啦~深知您招聘期忙碌,我是应聘【XX岗位】的XXX,个人经历与岗位匹配度较高,麻烦您抽空看下我的简历,期待能有面试机会,感谢您的时间~4.&nbsp;面试结束后,跟进面试结果HR您好,我是X月X日参加【XX岗位】面试的XXX,非常认可贵司的业务方向,也十分契合岗位需求,想咨询下面试进度,辛苦您啦~5.&nbsp;应届生/零经验实习生破冰HR您好,我是XX学校XX专业应届生,应聘【XX实习岗】,熟练掌握【办公软件/相关技能】,学习能力强,做事认真负责,可全职实习,麻烦您看下简历,期待您的回复~这些文案的核心逻辑,都是去掉无效铺垫,把核心信息和价值直接给到HR,没有多余的客套话,却能精准戳中HR的需求,既显得专业礼貌,又能让HR快速看到你的优势,自然愿意第一时间回复。角度三:避坑进阶视角,加分技巧+干货,让回复率翻倍光有文案还不够,掌握这些进阶技巧,能让你的沟通效果翻倍,不仅能被秒回,还能大幅提升面试邀约率,避免因为小细节错失机会。1.&nbsp;沟通时间选对,事半功倍HR的高效工作时间是上午9:30-11:30,下午2:30-4:30,这段时间发送消息,HR看到的概率最高,回复也最快;尽量避开早上刚上班、午休、下班及周末,这些时段HR要么忙于工作,要么休息,消息容易被淹没。2.&nbsp;绝不频繁刷屏追问发完消息后,耐心等待24-48小时,不要每隔几小时就发一次,频繁追问只会引起HR反感,反而不会回复;最多追问2次,若仍无回应,就转向其他岗位,不要浪费时间。3.&nbsp;简历与话术匹配,才是核心很多人话术写得好,简历却空洞无亮点,就算HR回复,也会因为简历不合格错失机会。话术里提到的核心优势,一定要在简历里体现,让HR看完消息后,再看简历能对应上,才会认定你是合适人选。我身边很多朋友,一开始靠文案拿到HR回复,却因为简历没亮点被淘汰,后来用泡泡小程序AiCV简历王优化简历,精准对标岗位JD,提取文案里的核心关键词,把零散的实习、校园经历,转化为HR爱看的量化成果,彻底解决“话术亮眼、简历拉胯”的问题,不仅被HR秒回,还能顺利拿到面试邀约。这个小程序能快速优化简历,把岗位要求的技能、个人优势突出展现,不用自己反复修改,节省大量时间,尤其适合求职期忙碌、没时间打磨简历的同学,让简历和沟通话术形成合力,求职效率直接翻倍。4.&nbsp;姿态平等,不卑微不生硬礼貌是加分项,但不用过度卑微,比如“求HR回复”“麻烦您一定看看”,反而会拉低印象分;也不要语气生硬,比如“简历看了吗?什么时候回复”,显得没有礼貌。保持平等专业的姿态,简单礼貌即可,更能获得HR的尊重。写在最后跟HR沟通,从来不是靠卑微的等待和无意义的问候,而是靠精准的信息传递、清晰的价值展现。一句好的开场白,能打破沉默,抓住宝贵的求职机会;一份亮眼的简历,能让这份机会落地,拿到心仪的面试邀约。别再发“在吗”“您好”这类无效消息,换个角度、用对文案、做好准备,你会发现,HR秒回其实很简单。求职路上,每一次沟通都藏着机会,别让不会说话,耽误了自己的努力。
跟HR说什么能被秒回?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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