【备战春招必看】字节跳动2025届第3套笔试解析 | 大厂真题通关指南

✅ 字节跳动春招备战指南 ✅

💡 学习建议:

  • 先尝试独立解题(建议用时:90分钟/套)
  • 对照解析查漏补缺
  • 配套练习题库

互联网必备刷题宝典🔗

📢 字节跳动技术岗笔试重要信息速览

⏰ 笔试时间安排

  • 常规场次:每周六交替进行
    • 上午场 10:00~12:00
    • 晚间场 19:00~21:00
  • 通知时间:提前2天通过邮箱发送考试链接

🧩 笔试题型分布

岗位类型 题目构成
算法岗 选择题 + 4道编程
后端开发岗 选择题 + 3道编程
前端/测试岗 选择题 + 4道编程

⚙️ 考试设置要点

  • 考试平台:牛客网(ACM模式)
  • 监考要求
    • 必须开启笔记本前置摄像头
    • 禁止使用手机(需小程序锁定)
    • 允许使用本地IDE
  • 编程规范
    • 严格遵循输入输出格式
    • 注意时间复杂度控制(通常1s对应1e8次运算)

📚 笔试经验贴

(所有展示题面均已进行改编处理,保留核心考点)

本题库收录整理自:

  1. 互联网公开的笔试真题回忆版(经网友投稿)
  2. 各大技术社区公开讨论的经典题型
  3. 历年校招考生提供的解题思路

🔍 题库特点:

  • 100%真实笔试场景还原
  • 包含高频考点题型
  • 提供多语言实现参考
  • 持续更新2024届最新真题

⚠️ 注意事项:

  1. 所有题目均来自公开渠道,已进行改编脱敏处理
  2. 实际笔试可能出现题型变化,请以官方通知为准

🚀 春招备战指南

金三银四求职季即将到来!这里整理了最新字节跳动真题及解析,助你快速掌握笔试套路。建议重点突破以下题型:

  1. 动态规划/状态压缩
  2. 树形结构应用
  3. 字符串模式匹配
  4. 滑动窗口/双指针

(👇 下附最新笔试真题及详细解析 👇)

题目一:特殊数组计数

题目描述

小基定义一个数组为特殊数组:这个数组大小至少为 ,只由两种数字组成,且其中一种数字恰好出现一次。

例如: 是特殊数组(长度为 ,只有 组成且 恰好出现一次),而 都不是特殊数组。

小基有一个长度为 的数组 ,他想知道这个数组有多少个子数组是特殊数组。

输入描述

第一行输入一个正整数 ,表示数组长度。

第二行输入 个正整数 ,表示数组。

输出描述

输出一个整数表示答案。

样例1

输入:

6
1 1 4 5 1 4

输出:

1

说明:只有 是特殊数组。

样例2

输入:

4
2 2 3 2

输出:

3

题解

这道题目的关键在于如何高效地判断一个子数组是否为特殊数组。

对于每个子数组,需要满足以下条件:

  1. 长度至少为3
  2. 只包含两种不同的数字
  3. 其中一种数字恰好出现一次

可以使用双指针或滑动窗口的方法:

  1. 枚举左端点 i
  2. 对于每个左端点,枚举右端点 j
  3. 用哈希表统计当前区间内数字的出现次数
  4. 检查是否满足特殊数组的条件

时间复杂度:

参考代码

C++:

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

int main() {
    int n;
    cin >> n;
    vector<int> arr(n);
    for(int i = 0; i < n; i++) {
        cin >> arr[i];
    }
    
    int ans = 0;
    for(int i = 0; i < n-2; i++) {
        unordered_map<int,int> cnt;
        for(int j = i; j < n; j++) {
            cnt[arr[j]]++;
            if(j-i+1 >= 3 && cnt.size() == 2) {
                for(auto [num,freq] : cnt) {
                    if(freq == 1) {
                        ans++;
                        break;
                    }
                }
            }
        }
    }
    cout << ans << endl;
    return 0;
}

Python:

n = int(input())
arr = list(map(int, input().split()))

ans = 0
for i in range(n-2):
    cnt = {}
    for j in range(i, n):
        cnt[arr[j]] = cnt.get(arr[j], 0) + 1
        if j-i+1 >= 3 and len(cnt) == 2:
            for num, freq in cnt.items():
                if freq == 1:
                    ans += 1
                    break
print(ans)

Java:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int[] arr = new int[n];
        for(int i = 0; i < n; i++) {
            arr[i] = scan.nextInt();
        }
        
        int ans = 0;
        for(int i = 0; i < n-2; i++) {
            Map<Integer,Integer> cnt = new HashMap<>();
            for(int j = i; j < n; j++) {
                cnt.put(arr[j], cnt.getOrDefault(arr[j], 0) + 1);
                if(j-i+1 >= 3 && cnt.size() == 2) {
                    for(Map.Entry<Integer,Integer> entry : cnt.entrySet()) {
                        if(entry.getValue() == 1) {
                            ans++;
                            break;
                        }
                    }
                }
            }
        }
        System.out.println(ans);
    }
}

题目二:宝石与金币

题目描述

小柯在玩一款模拟经营游戏,这个游戏按时间排序有 个事件,每个事件可以在两种选项中选择一种:

(1) 消耗 颗宝石,获得 枚金币。 (2) 获得 颗宝石。

不过,宝石的数量是有上限的,在任何时刻,若小柯的宝石数量大于 ,则大于 部分的宝石直接消失。

个事件结束后,小柯每拥有 颗宝石,都可以将其换成 枚金币。

小柯初始时没有宝石,他想知道在最优策略下,他最多可以获得多少金币。

...(about 1000 more lines)...

题目三:循环彩带

题目描述

小兰有一条长度为 的彩带,彩带的每一个位置都有一个价值,用 表示。

小兰的彩带是由一条长度为 的彩带一直循环得到的,因此当 时,

小兰每次会从左往右或从右往左剪一段长度为 的彩带,他想知道每次剪下来的彩带的价值之和是多少。

输入描述

第一行输入两个正整数 ,表示彩带长度和剪彩带次数。

第二行输入 个正整数 ,表示彩带每一个位置的价值。

接下来 行,每行先输入一个字符 为 'L' 说明从左往右剪, 为 'R' 说明从右往左剪,再输入一个正整数

输出描述

输出 行,每行输出一个整数表示答案。

样例1

输入:

6 3
1 1 3 5 1 4
L 2
L 3
R 12

输出:

2
10
32

说明:

  • 第一次剪彩带,剪下来的是 ,价值之和为
  • 第二次剪彩带,剪下来的是 ,价值之和为
  • 第三次剪彩带,剪下来的是 ,价值之和为

题解

这是一个循环数组的问题。关键点在于:

  1. 处理循环:对于长度为 n 的数组,第 i 个位置的实际值为 a[i % n]
  2. 处理前缀和:预处理前缀和数组可以快速计算区间和
  3. 处理大数:注意到循环节的长度为 n,只需要计算完整循环节的个数和剩余部分

时间复杂度:

参考代码

C++:

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

int main() {
    int n, q;
    cin >> n >> q;
    vector<int> arr(n);

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

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

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

全部评论
世另我
点赞 回复 分享
发布于 02-25 11:30 浙江
接好运
点赞 回复 分享
发布于 02-25 11:30 浙江

相关推荐

点赞 评论 收藏
分享
评论
3
4
分享

创作者周榜

更多
牛客网
牛客企业服务