京东笔试 京东秋招 京东笔试题 0920
笔试时间:2025年9月20日
往年笔试合集:
第一题:发粽子
题目描述:端午节要到了,粽子店针对小朋友研发了一种卡通粽子。为了打广告,店铺举办了一个活动:
- 前 n+1 个索要粽子的小朋友都是可以拿到粽子的。
- 每一个小朋友都至少要发一个粽子。
还有一个抽卡环节:粽子店准备了 n 张卡,前 n 个小朋友会分别取一张。
卡片有两种:
- '+' :抽到这张卡意味着下一个小朋友拿到的粽子比自己多。
- '-' :抽到这张卡意味着下一个小朋友拿到的粽子比自己少。
粽子店会在前 n 个小朋友都抽完卡以后统一发放粽子。
请问:粽子店最少需要发放多少粽子,才能符合抽卡的结果?
输入描述
输入第一行仅包含一个正整数 n,表示卡片的数量。
输入第二行是一个长度为 n 的字符串,仅包含 '+' 和 '-' 两种符号。
数据范围:1 <= n <= 500000
输出描述
输出一个正整数,表示粽子店最少发出的粽子数量。
样例输入
3
--+
样例输出
8
样例说明: 最少的发放方案为 {3, 2, 1, 2},总共发放 3 + 2 + 1 + 2 = 8 个粽子。
参考题解
解题思路:
- 用一个数组 candy 保存每个小朋友的粽子数,初始都为 1(保证至少一个)。
- 从左到右扫描:如果当前位置卡片是 '+',说明下一个小朋友要比当前多,所以让 candy[i+1] = candy[i] + 1。
- 从右到左扫描:如果当前位置卡片是 '-',说明下一个小朋友要比当前少,所以保证 candy[i] >= candy[i+1] + 1。用 max 保证不破坏之前的约束。
- 最后把所有小朋友的 candy[i] 加起来就是最少需要的粽子数量。
C++:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
string s;
cin >> s;
vector<long long> candy(n + 1, 1);
// 从左到右处理 '+'
for (int i = 0; i < n; i++) {
if (s[i] == '+') {
candy[i + 1] = candy[i] + 1;
}
}
// 从右到左处理 '-'
for (int i = n - 1; i >= 0; i--) {
if (s[i] == '-') {
candy[i] = max(candy[i], candy[i + 1] + 1);
}
}
long long ans = 0;
for (int i = 0; i <= n; i++) {
ans += candy[i];
}
cout << ans << endl;
return 0;
}
Java:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String s = sc.next();
long[] candy = new long[n + 1];
Arrays.fill(candy, 1);
// 从左到右处理 '+'
for (int i = 0; i < n; i++) {
if (s.charAt(i) == '+') {
candy[i + 1] = candy[i] + 1;
}
}
// 从右到左处理 '-'
for (int i = n - 1; i >= 0; i--) {
if (s.charAt(i) == '-') {
candy[i] = Math.max(candy[i], candy[i + 1] + 1);
}
}
long ans = 0;
for (int i = 0; i <= n; i++) {
ans += candy[i];
}
System.out.println(ans);
}
}
Python:
n = int(input())
s = input()
candy = [1] * (n + 1)
# 从左到右处理 '+'
for i in range(n):
if s[i] == '+':
candy[i + 1] = candy[i] + 1
# 从右到左处理 '-'
for i in range(n - 1, -1, -1):
if s[i] == '-':
candy[i] = max(candy[i], candy[i + 1] + 1)
ans = sum(candy)
print(ans)
第二题:老张的景点规划
题目描述:爱旅游的老张来到了我国西南地区的某个城市旅游。这个城市以海拔落差大著称,同一个城市内既能领略雪山的伟岸,又能欣赏平原溪流的静谧。
老张提前在网上做好了攻略,掌握了这个城市所有
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025 春招笔试合集 文章被收录于专栏
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南
