【备战春招必看】字节跳动2025届春招第1套笔试解析 | 大厂真题通关指南
✅ 字节跳动春招备战指南 ✅
💡 学习建议:
- 先尝试独立解题(建议用时:90分钟/套)
- 对照解析查漏补缺
- 配套练习题库
互联网必备刷题宝典🔗
📢 字节跳动技术岗笔试重要信息速览
⏰ 笔试时间安排
- 常规场次:每周六交替进行
- 上午场 10:00~12:00
- 晚间场 19:00~21:00
- 通知时间:提前2天通过邮箱发送考试链接
🧩 笔试题型分布
算法岗 | 选择题 + 4道编程 |
后端开发岗 | 选择题 + 3道编程 |
前端/测试岗 | 选择题 + 4道编程 |
⚙️ 考试设置要点
- 考试平台:牛客网(ACM模式)
- 监考要求:
- 必须开启笔记本前置摄像头
- 禁止使用手机(需小程序锁定)
- 允许使用本地IDE
- 编程规范:
- 严格遵循输入输出格式
- 注意时间复杂度控制(通常1s对应1e8次运算)
📚 笔试经验贴
(所有展示题面均已进行改编处理,保留核心考点)
本题库收录整理自:
- 互联网公开的笔试真题回忆版(经网友投稿)
- 各大技术社区公开讨论的经典题型
- 历年校招考生提供的解题思路
🔍 题库特点:
- 100%真实笔试场景还原
- 包含高频考点题型
- 提供多语言实现参考
- 持续更新2024届最新真题
⚠️ 注意事项:
- 所有题目均来自公开渠道,已进行改编脱敏处理
- 实际笔试可能出现题型变化,请以官方通知为准
🚀 春招备战指南
金三银四求职季即将到来!这里整理了最新字节跳动真题及解析,助你快速掌握笔试套路。建议重点突破以下题型:
- 动态规划/状态压缩
- 树形结构应用
- 字符串模式匹配
- 滑动窗口/双指针
(👇 下附最新笔试真题及详细解析 👇)
题目一:最小矩形面积
题目内容
小基拿到了一个长度为 的数组,他希望把数组中的元素分成
个二元组:
。
每个二元组对应平面直角坐标系的一个点,然后小基希望用一个边和坐标轴平行的矩形将所有点囊括在内。小基希望最终矩形的面积尽可能小,你能帮帮他吗?
输入描述
第一行输入一个正整数 。
第二行输入 个正整数
,代表数组的元素。
输出描述
一个整数,代表矩形的最小面积。
样例1
输入:
2
1 2 3 4
输出:
1
说明: 和
题解
将 个数从小到大排序,横坐标选前
个,纵坐标选后
个。对于
个
来说,需要将其全部覆盖最小的长度为
,对于
来说也是同理,最终的面积为两者相乘。
参考代码
C++:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int len;
cin >> len;
vector<int> nums(2 * len);
for(int & val : nums) {
cin >> val;
}
sort(nums.begin(), nums.end());
ll w = nums[len - 1] - nums[0];
ll h = nums.back() - nums[len];
cout << w * h << "\n";
return 0;
}
Python:
n = int(input())
arr = sorted(list(map(int, input().split())))
w = arr[n-1] - arr[0]
h = arr[-1] - arr[n]
print(w * h)
Java:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int size = scan.nextInt();
int[] data = new int[2*size];
for(int i = 0; i < 2*size; i++) {
data[i] = scan.nextInt();
}
Arrays.sort(data);
long width = data[size-1] - data[0];
long height = data[2*size-1] - data[size];
System.out.println(width * height);
}
}
题目二:特殊倍数子数组
题目内容
小基有一个数组,他想知道有多少连续子数组的和同时是 3 和 5 的倍数,但不是 4 的倍数。
输入描述
第一行输入一个整数 表示数组长度。
第二行输入 个整数表示数组
。
输出描述
一个整数。
样例1
输入:
3
13 17 30
输出:
2
题解
使用前缀和 + 哈希表来解决。如果两个前缀和对 15 取模相等,说明这段区间和是 15 的倍数。同理,如果对 60 取模相等,说明是 60 的倍数。用容斥原理,答案 = 15 的倍数个数 - 60 的倍数个数。
参考代码
C++:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
int n;
cin >> n;
vector<int> arr(n);
for(int& x : arr) cin >> x;
ll sum = 0, ans = 0;
unordered_map<int,int> mod15, mod60;
mod15[0] = mod60[0] = 1;
for(int x : arr) {
sum += x;
int r15 = sum % 15;
int r60 = sum % 60;
ans += mod15[r15];
ans -= mod60[r60];
mod15[r15]++;
mod60[r60]++;
}
cout << ans;
return 0;
}
Python:
n = int(input())
arr = sorted(list(map(int, input().split())))
w = arr[n-1] - arr[0]
h = arr[-1] - arr[n]
print(w * h)
Java:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int len = in.nextInt();
Map<Long,Integer> map15 = new HashMap<>();
Map<Long,Integer> map60 = new HashMap<>();
map15.put(0L, 1);
map60.put(0L, 1);
long total = 0, result = 0;
for(int i = 0; i < len; i++) {
total += in.nextInt();
long rem15 = total % 15;
long rem60 = total % 60;
result += map15.getOrDefault(rem15, 0);
result -= map60.getOrDefault(rem60, 0);
map15.put(rem15, map15.getOrDefault(rem15, 0) + 1);
map60.put(rem60, map60.getOrDefault(rem60, 0) + 1);
}
System.out.println(result);
}
}
题目三:LCA节点集计数
题目内容
最近公共祖先简称 LCA(Lowest Common Ancestor) 两个节点的最近公共祖先,就是这两个点的公共祖先里面离根最远的那个。
小基有一棵有根树,树的根节点为 1 号节点。定义 是:LCA 为
的非空节点集个数,小基想知道
到
的值。由于
可能很大,因此你需要输出
对
取模后的结果。
输入描述
第一行输入一个正整数 ,代表树的节点个数。
接下来 行,每行两个整数
表示树上的边。
输出描述
输出 个整数表示答案。
样例1
输入:
3
1 2
2 3
输出:
4 2 1
说明: LCA 为 1 的节点集:(1),(1,2),(1,3),(1,2,3) LCA 为 2 的节点对:(2),(2,3) LCA 为 3 的节点对:(3)
题解
对于当前节点 ,从该节点所有子树中选出一些点后构成的节点集合的 LCA 一定是节点
。可以分两种情况:
- 选择节点
:每棵子树可以任意选择(包括不选)
- 不选节点
:不能只选一棵子树上的节点,且所有选择不能为空集
参考代码
C++:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD = 1e9 + 7;
ll fastPow(ll base, ll exp) {
ll res = 1;
while(exp) {
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力