京东笔试 京东秋招 京东笔试题 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等多种语言做法集合指南