【秋招笔试】2025.08.16京东秋招机考真题改编

✅ 秋招备战指南 ✅

💡 学习建议:

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

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

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

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

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

题目一:魔法水晶阵列能量优化

1️⃣:理解逆序对的变化规律,分析区间操作对逆序对的影响

2️⃣:选择后缀区间避免产生新的逆序对,只最大化消除的逆序对

3️⃣:使用线性扫描维护前缀后缀统计,计算每个位置的收益

难度:中等

这道题目的关键在于理解对区间进行 +1 操作时逆序对数量的变化规律。通过数学分析发现,选择后缀区间是最优策略,可以避免产生新的逆序对。使用双指针和计数数组,可以在 O(n) 时间内求解。

题目二:艺术品评审最佳区间选择

1️⃣:理解题目要求,需要最大化去除最大最小值后的平均值

2️⃣:使用滑动窗口遍历所有长度为 m 的连续子数组

3️⃣:利用 multiset 或 TreeMap 维护窗口内元素的有序性

难度:中等

这道题目结合了滑动窗口和数据结构维护。关键在于发现只需最大化分子部分,然后使用合适的数据结构来快速维护窗口内的最大值和最小值。通过 multiset 可以实现 O(n log m) 的高效解法。

01. 魔法水晶阵列能量优化

问题描述

小基 正在研究一个古老的魔法水晶阵列。这个阵列由 个水晶组成,每个水晶都有一个能量等级 。由于水晶之间的相互作用,当能量等级较高的水晶位于能量等级较低的水晶前面时,会产生能量冲突,造成魔法不稳定。

具体来说,如果存在位置 ,那么这一对水晶 会产生一次能量冲突。小基 需要计算整个阵列中能量冲突的总数。

为了优化阵列的稳定性,小基 可以对阵列进行至多一次魔法增强操作:选择一个连续的区间 (其中 ),将区间内所有水晶的能量等级同时提升

小基 想知道,通过最优的魔法增强操作,最多能够减少多少次能量冲突?

输入格式

第一行包含一个正整数 ,表示测试数据的组数。

对于每组测试数据:

  • 第一行包含一个正整数 ,表示水晶阵列的长度。
  • 第二行包含 个正整数 ,表示每个水晶的能量等级。

输出格式

对于每组测试数据,输出一个整数,表示通过最优的魔法增强操作能够减少的最大能量冲突数。

样例输入

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

样例输出

2
0
2

数据范围

样例 解释说明
样例1 选择区间 ,变化后的序列为 ,原来有5个冲突,现在有3个冲突,减少了2个
样例2 序列已经有序,无论选择哪个区间都无法减少冲突数
样例3 选择区间 ,变化后的序列为 ,原来有2个冲突,现在没有冲突,减少了2个

题解

这道题要求通过一次区间加1操作来最大化减少的逆序对数量。

核心思路

观察区间操作对逆序对的影响:当选择区间 进行加1操作时,只有跨区间边界的元素对会改变逆序关系。

  1. 消除逆序对:如果 ,操作后 变为 ,逆序对被消除
  2. 新增逆序对:如果 ,操作后 变为 ,产生新逆序对

算法策略

从右向左枚举区间起点,动态维护两个频次数组:

  • suffix_count[x]:右侧未进入区间的值为 的元素个数
  • prefix_incr[x]:已进入区间且变为值 的元素个数(原值为

对于当前位置 ,元素 进入区间后:

  • 消除的逆序对:suffix_count[a[i] + 1](右侧值为 的元素与当前 形成的逆序对)
  • 新增的逆序对:prefix_incr[a[i]](左侧已加1变为 的元素与右侧值为 的元素形成的逆序对)

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

参考代码

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

def solve():
    t = int(input())
    for _ in range(t):
        n = int(input())
        arr = list(map(int, input().split()))
        
        max_val = n + 3
        suffix_cnt = [0] * max_val   # 右侧还未加入区间的值的频次
        prefix_add = [0] * max_val   # 左侧已加入区间变成某值的频次
        
        # 初始化:所有值都在右侧
        for val in arr:
            suffix_cnt[val] += 1
        
        gain = 0
        max_gain = 0
        
        # 从右向左枚举区间左端点
        for pos in range(n - 1, -1, -1):
            val = arr[pos]
            suffix_cnt[val] -= 1
            gain += suffix_cnt[val + 1]  # 消除的逆序对数
            gain -= prefix_add[val]      # 产生的逆序对数
            prefix_add[val + 1] += 1     # 当前值加1后进入左侧统计
            max_gain = max(max_gain, gain)
        
        print(max_gain)

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

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int test_cases;
    cin >> test_cases;
    
    while (test_cases--) {
        int n;
        cin >> n;
        vector<int> seq(n);
        for (int i = 0; i < n; i++) {
            cin >> seq[i];
        }

        int range = n + 3;
        vector<long long> right_freq(range, 0), left_incr(range, 0);
        
        // 统计初始频次(所有元素都在右侧)
        for (int val : seq) {
            right_freq[val]++;
        }

        long long delta = 0, answer = 0;
        
        // 从右向左扫描
        for (int idx = n - 1; idx >= 0; idx--) {
            int elem = seq[idx];
            right_freq[elem]--;
            delta += right_freq[elem + 1];  // 减少的逆序对
            delta -= left_incr[elem];       // 增加的逆序对
            left_incr[elem + 1]++;          // 元素进入区间后数值+1
            answer = max(answer, delta);
        }
        
        cout << answer << "\n";
    }
    
    return 0;
}
  • Java
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int testCount = Integer.parseInt(reader.readLine());
        
        while (testCount-- > 0) {
            int size = Integer.parseInt(reader.readLine());
            int[] nums = new int[size];
            
            StringTokenizer tokens = new StringTokenizer(reader.readLine());
            for (int i = 0; i < size; i++) {
                nums[i] = Integer.parseInt(tokens.nextToken());
            }
            
            int maxRange = size + 3;
        

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

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

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

全部评论

相关推荐

1.&nbsp;请介绍自己,重点分享与风险评估、合同审核或项目风控相关的经历(如校园项目风险评估、合同草拟实践、团队协作防控风险)2.&nbsp;你为什么申请京东的风控岗位?对“风控在京东‘多业务生态’中的核心价值”(如守护业务合规、降低损失风险、支撑稳健扩张)理解是什么?3.&nbsp;你认为风控岗的核心目标是什么?如何平衡“风险防控的严格性”与“业务发展的灵活性”?4.&nbsp;你了解不同业务的风险类型吗?(如零售的欺诈风险、物流的履约风险、科技的合规风险)请结合京东场景举例说明5.&nbsp;你有过项目风险评估的经历吗?比如校园活动项目,如何识别潜在风险(如预算超支、安全事故)并设计应对措施?6.&nbsp;你认为“客户为先”在风控中如何体现?这里的“客户”是内部业务部门,如何通过风控优化满足其需求(如简化低风险业务流程、提供风险规避建议)?7.&nbsp;你熟练使用办公软件吗?(如XMind梳理风险流程、Excel分析风险数据)如何用这些工具辅助风控工作?8.&nbsp;你关注过京东的业务风控案例吗?(如零售反欺诈、物流安全管理)认为其在“风险识别”“应对效率”上的优势是什么?9.&nbsp;你有过合同审核的经历吗?比如审核校园合作协议,关注哪些核心条款(如权责划分、违约责任、争议解决)?10.&nbsp;你学习风控知识的方法是什么?比如如何理解“互联网业务中‘速度’与‘合规’的风控平衡逻辑”
查看10道真题和解析
点赞 评论 收藏
分享
1.&nbsp;请先做个简单的自我介绍?重点介绍一下自己在投资分析、客户服务等方面与投资顾问岗位相关的经历。2.&nbsp;你最近5年的职业规划是什么,能否详细阐述在同花顺这样的平台上如何逐步实现投资顾问专业能力的提升?3.&nbsp;你应聘这个岗位的优势是什么?劣势是什么?请分别从专业知识、沟通技巧、市场洞察力这三个方面详细说明。4.&nbsp;为什么选择应聘我们同花顺公司?请结合公司在行业内的地位以及投资顾问岗位发展空间谈谈你的想法。5.&nbsp;你期望的薪酬是多少?请说明你得出这个期望薪酬的依据,以及考虑到同花顺公司的薪酬体系后的合理性。6.&nbsp;请举例说明你过往是如何运用专业知识为客户制定个性化投资策略的,在同花顺平台如何进一步优化策略?7.&nbsp;面对市场大幅波动时,你怎样安抚客户情绪并给出合理投资建议,在同花顺工作会采取什么特别措施?8.&nbsp;讲述一次你成功开拓新客户资源的经历,若在同花顺从事投资顾问会怎样拓展客户群体?9.&nbsp;对于同花顺丰富的金融产品体系,你计划如何快速熟悉并能精准推荐给合适客户?10.&nbsp;如何维护与老客户的长期良好合作关系,在同花顺工作有什么独特思路来提升客户忠诚度?11.&nbsp;当客户提出的投资需求与风险承受能力不匹配时,你会如何处理,在同花顺会遵循怎样流程?12.&nbsp;举例说明你如何跟踪市场动态并及时调整投资建议,在同花顺如何借助平台工具做这件事?13.&nbsp;谈谈你对当前宏观经济形势对投资市场影响的理解,以及在同花顺工作如何向客户解读?14.&nbsp;若遇到比较挑剔、要求高的客户,你会怎样应对并满足其需求,在同花顺有什么应对策略?
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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