【秋招笔试】2025.09.20京东秋招笔试真题改编

✅ 秋招备战指南 ✅

💡 学习建议:

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

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

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

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

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

京东

题目一:小兰的密码重设

1️⃣:将序列按每两位分组,转化为动态规划问题

2️⃣:维护每层最小值和次小值,优化时间复杂度到O(n)

3️⃣:利用"相邻不同"的DP状态转移求解最少修改次数

难度:中等

这道题目的关键在于理解配对和区分规则,并将问题转化为经典的动态规划。通过将原序列每两位看作一个配对,问题变成了在配对序列上选择数字,使得相邻配对数字不同,并最小化修改代价。

题目二:小基的探宝之旅

1️⃣:将无向图转化为有向无环图(DAG)

2️⃣:按海拔高低建立有向边,海拔高的指向海拔低的

3️⃣:使用拓扑排序配合动态规划求DAG上的最长路径

难度:中等

这道题目需要理解海拔约束下的路径搜索问题。关键观察是加上海拔严格递减的约束后,原无向图实际上构成了一个DAG,从而可以使用经典的DAG最长路径算法来高效求解。

01. 小兰的密码重设

问题描述

小兰是一位网络安全专家,她正在为公司设计一套新的密码验证系统。这套系统有一个特殊的规则:密码必须由数字组成,并且满足特定的配对模式。

具体来说,小兰面前有一个包含 个数字()的密码序列,其中 为偶数。她需要调整这个序列,使其满足以下两个条件:

  1. 配对规则:将序列按顺序每两个数字分为一组,每组内的两个数字必须相同。即第 位和第 位数字相同(

  2. 区分规则:相邻的两个配对组必须使用不同的数字。即第 位和第 位数字不同(

现在小兰想知道,她最少需要修改多少个数字的值,才能使密码序列满足上述要求?

输入格式

第一行包含一个正整数 ,表示密码序列的长度, 为偶数。

第二行包含连续的 位数字,每个数字都在 之间。

输出格式

输出一个整数,表示小兰最少需要修改的数字个数。

样例输入

8
11233298
6
123456

样例输出

3
4

数据范围

  • 为偶数
  • 输入序列中每个数字都在 之间
样例 解释说明
样例1 原序列:11233298,可修改为:11223399,需要修改3个位置(第6、7、8位)
样例2 原序列:123456,需要大幅调整配对和区分规则,最少修改4个位置

题解

这道题的核心思想是将原问题转化为动态规划求解。

首先分析问题结构:我们需要将长度为 的数字序列按每两位分组,共 组。每组内两个数字必须相同,相邻组的数字必须不同。

解题步骤:

  1. 状态定义:对于第 个配对组,定义 表示第 组选择数字 )时的最小修改次数。

  2. 转移方程

    • 初始状态:,其中 表示将第 组的两个数字都修改为 的代价
    • 状态转移:
  3. 优化技巧:为了达到 的时间复杂度,我们维护每一层的最小值和次小值,这样转移时只需要常数时间。

  4. 最终答案

这种方法的时间复杂度是 ,空间复杂度 ,完全满足题目要求。

关键观察是:虽然看起来是字符串问题,但实际上是经典的"相邻不同"动态规划问题的变形。

参考代码

Python

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

n = int(input())
s = input()
m = n // 2  # 配对数量

# 初始化第一个配对
prev = [0] * 10
for d in range(10):
    # 计算将第0组改成数字d的代价
    cost = (int(s[0]) != d) + (int(s[1]) != d)
    prev[d] = cost

# 处理后续配对
for i in range(1, m):
    curr = [0] * 10
    
    # 找到上一层的最小值和次小值
    min1 = min2 = float('inf')
    min1_idx = -1
    for d in range(10):
        if prev[d] < min1:
            min2 = min1
            min1 = prev[d]
            min1_idx = d
        elif prev[d] < min2:
            min2 = prev[d]
    
    # 计算当前层
    for d in range(10):
        # 计算将第i组改成数字d的代价
        cost = (int(s[2*i]) != d) + (int(s[2*i+1]) != d)
        # 选择上一层中与d不同的最小值
        add_val = min2 if d == min1_idx else min1
        curr[d] = cost + add_val
    
    prev = curr

# 输出答案
print(min(prev))

C++

#include <bits/stdc++.h>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n;
    cin >> n;
    string s;
    cin >> s;
    
    int m = n / 2;  // 配对数量
    const int INF = 1e9;
    
    array<int, 10> prev, curr;
    
    // 初始化第一个配对
    for(int d = 0; d < 10; d++){
        int cost = (s[0] - '0' != d) + (s[1] - '0' != d);
        prev[d] = cost;
    }
    
    // 处理后续配对
    for(int i = 1; i < m; i++){
        // 找到上一层最小值和次小值
        int min1 = INF, min2 = INF, min1_idx = -1;
        for(int d = 0; d < 10; d++){
            if(prev[d] < min1){
                min2 = min1;
                min1 = prev[d];
                min1_idx = d;
            } else if(prev[d] < min2){
                min2 = prev[d];
            }
        }
        
        // 计算当前层
        for(int d = 0; d < 10; d++){
            int cost = (s[2*i] - '0' != d) + (s[2*i+1] - '0' != d);
            int add_val = (d == min1_idx) ? min2 : min1;
            curr[d] = cost + add_val;
        }
        
        prev = curr;
    }
    
    int ans = *min_element(prev.begin(), prev.end());
    cout << ans << "\n";
    
    return 0;
}

Java

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int n = Integer.parseInt(br.readLine());
        String s = br.readLine();
        
        int m = n / 2;  // 配对数量
        final int INF = (int)1e9;
        
        int[] prev = new int[10];
        int[] curr = new int[10];
        
        // 初始化第一个配对
        for(int d = 0; d < 10; d++){
            int cost = 0;
            if(s.charAt(0) - '0' != d) cost++;
            if(s.charAt(1) - '0' != d) cost++;
       

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

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

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

全部评论

相关推荐

1.&nbsp;请介绍自己,重点分享与交互设计、原型制作或用户体验优化相关的经历(如设计实习、校园APP交互设计、用户流程优化项目)2.&nbsp;你为什么申请京东的交互设计师岗位?对“交互设计在京东‘多业务产品’中的核心价值”(如简化用户操作、提升产品效率、降低使用门槛)理解是什么?3.&nbsp;你认为交互设计的核心目标是什么?如何平衡“用户体验流畅性”与“业务功能完整性”(如电商APP的支付流程设计)?4.&nbsp;你熟悉哪些交互设计方法或工具?(如用户旅程图、Axure、Figma)这些工具在京东零售APP某功能(如购物车)设计中的应用场景有何差异?5.&nbsp;你有过原型设计的经历吗?比如为校园小程序设计交互原型,如何确保“逻辑清晰”与“操作直观”?6.&nbsp;你认为“客户为先”在交互设计中如何体现?这里的“客户”是用户,如何通过设计满足其核心需求(如减少操作步骤、明确反馈提示)?7.&nbsp;你有过用户体验优化的经历吗?比如发现某流程(如注册)用户抱怨多,如何分析并调整设计?8.&nbsp;你关注过京东的产品交互吗?(如京东APP的搜索流程、京东健康的问诊界面)认为其在“操作便捷性”上的优势或可优化点是什么?9.&nbsp;你认为用户同理心在交互设计中的作用是什么?如何做到“站在用户角度思考”(如设计老年用户使用的功能时)?10.&nbsp;你学习交互设计知识的方法是什么?比如如何理解“‘少即是多’的设计原则在复杂功能中的应用”
点赞 评论 收藏
分享
09-28 21:34
已编辑
浙江大学 算法工程师
1.&nbsp;签到题,知道ASCII码怎么计算就行2.&nbsp;给一个initial数组,代表层序遍历一棵树的节点的权值(0代表空节点),节点权值只有1,2,3,4,5五种可能,然后给你一个target数组,要求通过操作把树的节点权值变成这个数组,操作是:选中一个节点,则该节点及其子树的所有节点的权值+1(如果超过5,变回1)。&nbsp;问从initial变成target的最小操作次数可以边遍历边维护一个cum_diff[i],&nbsp;代表i和i的所有父节点的已操作次数,&nbsp;对于节点idx,&nbsp;(idx-1)&gt;&gt;1获得其父节点下标,进而获得所有父节点操作次数,当前节点还需操作:&nbsp;(&nbsp;(初始需操作次数&nbsp;-&nbsp;所有父节点操作次数)%&nbsp;5)&nbsp;%5&nbsp;&nbsp;次p.s.&nbsp;这题90%很可能是没考虑空树3.&nbsp;有n(1&lt;=n&lt;=100)个魔法课程,每个魔法课需要mana[i]点法力学习,学习后能增强power[i]点法强,你只有M(1&lt;=M&lt;=1000)点法力值来学习,同时呢,你可以选择不同的楼层学习课程,共有m(1&lt;=m&lt;=5)个楼层,每个楼层有一个bonus[j](1&lt;=bonus&lt;=3),&nbsp;即在第j层学习时,增强的法强和消耗的法力都×bonus[j],&nbsp;&nbsp;你必须按顺序学习课程。&nbsp;问你可以获得的最大法强一开始直接回溯做的,想剪枝剪了好久,然后发现,回溯优化一下不就是记忆化搜索,记忆化搜索优化一下不就是动态规划?于是直接开始dp,&nbsp;dp[i][j][k]&nbsp;代表拥有法力k时,在第j层学习第i个课程后的法强最大值,更新的时候我是用的四重循环,要注意只有dp[i-1][floor][k]&gt;0&nbsp;且&nbsp;k&gt;=cost&nbsp;的时候,才进行max(dp[i][j][k],&nbsp;dp[i-1][floor][k]&nbsp;+&nbsp;bonus[j]*power[i])的更新第四题,由于第三题先写回溯,再优化回溯,再换成dp,再改dp的错,改了一个半小时,第四题根本没时间做了,只记得大鱼吃小鱼()
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
1.&nbsp;请用60秒自我介绍,突出你在电商/直播/内容/渠道运营方面的课程、项目或实习经历。2.&nbsp;你对舒客有哪些了解?结合口腔护理与电商业务特性,谈谈你为什么想加入、你能带来哪些运营价值,以及你对公司在行业中的定位与预期。3.&nbsp;面对“双11/618”等大促,你会如何制定平台电商的目标拆解与节奏安排(预热-爆发-返场)?4.&nbsp;如果负责天猫旗舰店,你会从店铺健康度出发,优先诊断哪些模块(流量、转化、客单、复购)并给出初步优化路径?5.&nbsp;请描述一个你用数据驱动选品或定价决策的案例或思路,指标如何设定,验证如何闭环?6.&nbsp;针对抖音直播间冷启动,你如何搭建“人货场”策略(主播画像、品单结构、场景脚本)以达成首播目标?7.&nbsp;小红书的种草与站内转化如何联动?请设计一条从笔记到店铺成交的内容转化链路与关键节点指标。8.&nbsp;若你拿到一份看板(UV、CTR、加购率、转化率、客单、复购率、ROI),请给出你的诊断顺序与改进优先级。9.&nbsp;你如何制定新品牙膏在不同平台(天猫、京东、抖音、拼多多)的差异化上新与价格带策略,避免价格内卷与串货?10.&nbsp;行为面试:回忆一次你在信息不充分下仍需落地活动方案的经历或设想,你如何设定MVP与风险对冲?11.&nbsp;若短视频自然流量下滑,你会从内容题材、节奏、封面标题、完播率与互动率哪几方面进行实验并判断胜出?12.&nbsp;面对平台搜索规则与人群标签调整,你如何快速复盘并更新人群包、词包与投放策略,控制ROI波动?13.&nbsp;请设计一个“电动牙刷爆款打造”计划书的核心骨架:人群洞察、卖点提炼、素材矩阵、投放与直播联动。14.&nbsp;若客服咨询“刺激/辣舌/起皮”等反馈增多,你如何联动产品、供应链与客服梳理问题链并在前台内容做预期管理?
查看14道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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