[秋招笔试]2025.10.19百度-第二套-机考改编题

✅ 秋招备战指南 ✅

💡 学习建议:

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

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

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

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

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

2025.10.19百度-第二套

题目一:服务大厅排队系统

1️⃣:将客户按奇偶性分为两个队列

2️⃣:偶数队列按降序排序

3️⃣:模拟服务过程:每3个高级会员后服务1个普通会员

难度:简单

这道题目的关键在于理解两个队列的处理规则。需要将输入按奇偶性分类,对偶数队列排序,然后按照规定的服务规则进行模拟输出。考察基本的数组操作、排序和模拟能力。

题目二:幸运数字筛选器

1️⃣:预处理所有不吉利数字(包含9的数及其倍数、9的倍数)

2️⃣:使用布尔数组标记不吉利数字

3️⃣:预处理每个位置后的第一个吉利数字,实现O(1)查询

难度:中等

这道题目结合了数字判断和预处理优化。由于查询量大,必须使用预处理而非暴力判断。关键是理解三条规则的关系,通过标记数组和后缀预处理实现高效查询。考察空间换时间的优化思想。

题目三:手办限购策略

1️⃣:使用动态规划维护不同交易次数下的最大利润

2️⃣:分别记录持有和不持有状态

3️⃣:当k较大时退化为贪心算法

难度:中等偏难

这道题目是经典的股票买卖问题变种,限制了最多k次交易。需要使用动态规划记录每个状态下的最优解,状态转移需要从后往前避免重复使用。考察动态规划的状态设计和转移优化能力。

01. 服务大厅排队系统

问题描述

K 小姐在某服务中心工作,该中心有两类客户:普通会员(会员号为奇数)和高级会员(会员号为偶数)。系统需要将到达的客户按照特定规则安排到两个服务队列中:

  • 队列 用于存储普通会员(奇数会员号),按照到达顺序排列。

  • 队列 用于存储高级会员(偶数会员号),按照会员号从大到小排序。

服务顺序规则如下:

  • 优先服务高级会员(队列 )。

  • 每服务 位高级会员后,必须服务 位普通会员(队列 )。

  • 当某个队列为空时,直接服务剩余队列中的所有客户。

请输出按照上述规则服务后的客户会员号序列。

输入格式

输入一行,包含若干个正整数,表示按到达顺序的客户会员号列表(以空格分隔)。

输出格式

输出一行,包含按服务顺序排列的客户会员号序列(以空格分隔,末尾无多余空格)。

样例输入

8 2 1 3 9 4 11 13 15

样例输出

8 4 2 1 3 9 11 13 15

数据范围

  • ,其中 为客户总数。

  • 会员号

样例 解释说明
样例1 队列 (奇数):(保持输入顺序);队列 (偶数): 降序排序为 。服务顺序:先服务 位高级会员 ;再服务 位普通会员 ;队列 已空,服务队列 剩余客户

题解

这道题的核心在于理解两个队列的处理规则。首先需要将输入的会员号分成两类:奇数放入队列 ,偶数放入队列

队列 保持输入顺序即可,而队列 需要按照会员号从大到小排序,这样优先服务会员号更大的高级会员。

接下来按照规则模拟服务过程:每次从队列 取出最多 位客户(如果不足 位就全部取出),然后从队列 取出 位客户。重复这个过程直到某个队列为空,最后把另一个队列中的剩余客户全部输出。

整个算法的时间复杂度主要在排序上,为 ,其中 是高级会员的数量。模拟过程只需要 的时间。

参考代码

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

# 读取输入
nums = list(map(int, input().split()))

# 分离奇数和偶数
odd_q = []  # 普通会员队列
even_q = []  # 高级会员队列

for val in nums:
    if val % 2 == 1:
        odd_q.append(val)
    else:
        even_q.append(val)

# 高级会员按降序排序
even_q.sort(reverse=True)

# 模拟服务过程
res = []
i, j = 0, 0

while i < len(odd_q) and j < len(even_q):
    # 服务最多3位高级会员
    cnt = 0
    while cnt < 3 and j < len(even_q):
        res.append(even_q[j])
        j += 1
        cnt += 1
    
    # 服务1位普通会员
    if i < len(odd_q):
        res.append(odd_q[i])
        i += 1

# 处理剩余客户
while j < len(even_q):
    res.append(even_q[j])
    j += 1

while i < len(odd_q):
    res.append(odd_q[i])
    i += 1

# 输出结果
print(' '.join(map(str, res)))
  • Cpp
#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
using namespace std;

int main() {
    string line;
    getline(cin, line);
    stringstream ss(line);
    
    vector<long long> odd_q, even_q;  // 奇数队列和偶数队列
    long long num;
    
    // 读取并分类
    while (ss >> num) {
        if (num & 1) {
            odd_q.push_back(num);
        } else {
            even_q.push_back(num);
        }
    }
    
    // 偶数队列降序排序
    sort(even_q.begin(), even_q.end(), greater<long long>());
    
    vector<long long> ans;
    int i = 0, j = 0;
    
    // 模拟服务过程
    while (i < odd_q.size() && j < even_q.size()) {
        // 服务最多3位高级会员
        int cnt = 0;
        while (cnt < 3 && j < even_q.size()) {
            ans.push_back(even_q[j++]);
            cnt++;
        }
        
        // 服务1位普通会员
        if (i < odd_q.size()) {
            ans.push_back(odd_q[i++]);
        }
    }
    
    // 添加剩余客户
    while (j < even_q.size()) ans.push_back(even_q[j++]);
    while (i < odd_q.size()) ans.push_back(odd_q[i++]);
    
    // 输出
    for (int k = 0; k < ans.size(); k++) {
        if (k > 0) cout << " ";
        cout << ans[k];
    }
    cout << endl;
    
    return 0;
}
  • Java
import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] tokens = br.readLine().split(" ");
        
        List<Long> oddList = new ArrayList<>();   // 普通会员队列
        List<Long> evenList = new ArrayList<>();  // 高级会员队列
        
        // 读取并分类
        for (String tok : tokens) {
            long val = Long.parseLong(tok);
            if (val % 2 == 1) {
                oddList.add(val);
            } else {
                evenList.add(val);
            }
        }
        
        // 高级会员降序排序
        evenList.sort(Collections.reverseOrder());
        
        List<Long> result = new ArrayList<>();
        int idxOdd = 0, idxEven = 0;
        
        // 模拟服务过程
        while (idxOdd < oddList.size() && idxEven < evenList.size()) {
            // 服务最多3位高级会员
            int count = 0;
            while (count < 3 && idxEven < evenList.size()) {
                result.add(evenList.get(idxEven++));
                count++;
            }
            
            // 服务1位普通会员
            if (idxOdd < oddList.size()) {
                result.add(oddList.get(idxOdd++));
            }
        }
        
        // 添加剩余客户
        while (idxEven < evenList.size()) {
            result.add(evenList.get(idxEven++));
        }
        while (idxOdd < oddList.size()) {
            result.add(oddList.get(idxOdd++));
        }
        
        // 输出结果
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < result.size(); i++) {
            if (i > 0) sb.append(" ");
            sb.append(result.get(i));
        }
        System.out.println(sb.toString());
    }
}

02. 幸运数字筛选器

问题描述

A 先生正在开发一个幸运数字筛选系统。在这个系统中,某些数字被认为是"不吉利"的,不能出现在结果序列中。

不吉利数字的定义规则如下:

  • 规则 :数字是 的倍数,例如

  • 规则 :数字本身包含数字 ,例如 (个位是 )、(十位是 )。

  • 规则 :数字是某个包含数字 的数的倍数。

现在给定一个数字序列,对于每个数字 ,需要判断:

  • 如果 是不吉利数字,输出

  • 如果 是吉利数字,输出比 大的第一个吉利数字。

输入格式

输入一行,格式为 ,表示 个需要判断的正整数(用逗号分隔,外层有方括号)。

输出格式

输出一行,格式为 ,其中 表示对应 的结果(用逗号分隔,外层有方括号)。

样例输入

[8,37,88]

样例输出

[10,40,100]

数据范围

样例 解释说明
样例1 对于 :不是不吉利数字,下一个吉利数字是 是不吉利数字);对于 :不是不吉利数字,下一个吉利数字需要跳过 )、(包含 ),答案是 ;对于 :不是不吉利数字,下一个需要跳过 、...、,答案是

题解

这道题要求对于每个查询数字,快速判断它是否满足不吉利规则,并找到下一个吉利数字。由于查询量可能很大(最多 次),暴力检查每个数字会超时。

关键思路是预处理。因为数字范围不超过 ,可以预先标记出所有不吉利的数字:

首先找出所有包含数字 的数(从 ),对于每个这样的数 ,标记它的所有倍数为不吉利(规则 和规则 )。

然后标记所有 的倍数为不吉利(规则 )。

接着从后往前扫描,预处理出每个位置之后的第一个吉利数字。这样对于每次查询,如果当前数字是不吉利的就返回 ,否则返回预处理好的下一个吉利数字。

时间复杂度:预处理 ,单次查询 。空间复杂度

参考代码

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

MAX = 1000000

# 检查是否包含数字9
def has_9(x):
    while x > 0:
        if x % 10 == 9:
            return True
        x //= 10
    return False

# 预处理不吉利数字
ban = [False] * (MAX + 2)

# 规则2和3:包含9的数及其倍数
nine_nums = [i for i in range(1, MAX + 1) if has_9(i)]
for x in nine_nums:
    mult = x
    while mult <= MAX:
        ban[mult] = True
        mult += x

# 规则1:9的倍数
for i in range(9, MAX + 1, 9):
    ban[i] = True

# 预处理下一个吉利数字
nxt = [-1] * (MAX + 2)
cur = -1
for i in range(MAX, -1, -1):
    if not ban[i]:
        cur = i
    nxt[i] = cur

# 读取输入
line = input().strip()
nums = []
temp = 0
in_num = False

for c in line:
    if c.isdigit():
        temp = temp * 10 + int(c)
        in_num = True
    else:
        if in_num:
            nums.append(temp)
            temp = 0
            in_num = False

if in_num:
    nums.append(temp)

# 处理查询
ans = []
for n in nums:
    if ban[n]:
        ans.append(-1)
    else:
        ans.append(nxt[n + 1])

# 输出结果
print('[' + ','.join(map(str, ans)) + ']')

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

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

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

全部评论

相关推荐

10-22 20:47
门头沟学院 Java
📍面试公司:杭州有赞🕐面试时间:2025.10.21💻面试岗位:Java开发实习生(偏向AI全栈)❓面试问题:全程1h20min1、描述一下&nbsp;HashMap&nbsp;的底层结构2、HashMap&nbsp;扩容的流程是怎样的?扩容后元素位置如何计算?3、HashMap&nbsp;是线程安全的吗?如果不是,如何实现线程安全?4、ConcurrentHashMap&nbsp;在&nbsp;JDK&nbsp;1.7&nbsp;和&nbsp;1.8&nbsp;中的实现有何区别?5、ConcurrentHashMap&nbsp;从分段锁改为&nbsp;CAS&nbsp;+&nbsp;synchronized&nbsp;的原因是什么?6、Spring&nbsp;AOP&nbsp;的实现机制是什么?7、有没有自己实现过自定义注解形式的&nbsp;AOP?如果业务方法执行失败,你们是怎么处理的?8、Spring&nbsp;如何解决循环依赖问题?三级缓存的核心思想是什么?9、线程池的工作原理是什么?(核心线程、队列、非核心线程、拒绝策略)10、如何设计线程池参数?(核心线程数、队列类型等)11、无界队列可能带来什么问题?12、核心线程数设置过大会有什么问题?13、如何合理评估线程池参数?14、MySQL&nbsp;的索引结构是什么?(B+&nbsp;树)15、覆盖索引是什么?如何避免回表查询?16、深分页会有什么问题?怎么优化?17、Redis&nbsp;的使用场景有哪些?18、什么样的数据适合放入缓存?19、Redis&nbsp;持久化方案有哪些?(RDB&nbsp;和&nbsp;AOF,RDB&nbsp;和&nbsp;AOF&nbsp;的优缺点分别是什么?20、什么是幂等性?如何实现幂等?21、提交订单时,前端和后端分别如何保证幂等?22、高并发下如何实现幂等?23、限流算法有哪些?(固定窗口、滑动窗口、令牌桶)令牌桶拿不到令牌怎么办?24、分布式环境下如何实现限流?25、极高流量下有没有更好的限流方式?26、微服务中服务发现的机制是什么?27、请求在微服务中的执行链路是怎样的?28、Spring&nbsp;Cloud&nbsp;生态有哪些核心组件?29、分布式事务主流方案有哪些?(二阶段,三阶段)30、TCC&nbsp;模式的三个阶段是什么?TCC&nbsp;会出现“悬挂”问题,解释一下?31、客户端发起请求但服务端未收到,可能的原因有哪些?如何排查?32、必须依赖一个“不稳定”的三方接口时,如何设计可靠业务?有没有预处理或兜底方案?33、从&nbsp;0&nbsp;到&nbsp;1&nbsp;设计系统的整体流程/思路是怎样的?34、平时有没有做过&nbsp;Code&nbsp;Review?自己如何评估代码可读性与质量?35、DDD(领域驱动设计)是什么?你的理解是什么?36、项目中的AI智能客服的功能和实现原理是什么?37、如何让&nbsp;AI&nbsp;回答更准确?(预设信息、上下文关联)38、如果&nbsp;AI&nbsp;无法回答用户刁钻的问题,如何处理?39、如何设计一个更智能的&nbsp;AI&nbsp;系统(包括AI能直接操作下单这类的功能,而不是仅仅对话)?40、用过哪些&nbsp;AI&nbsp;coding&nbsp;工具?写什么代码会用?对你效率提升大概多少?会让它写前端代码吗?效果如何?41、如何让&nbsp;AI&nbsp;生成更符合需求的代码?(Prompt&nbsp;优化、专用模型)42、你通常通过什么方式学习新技术?43、反问介绍业务🙌面试感想:在小红书看到的招聘信息投递完邮箱当天就约面,应该是部门mt直招。整体面下来感觉面试官人很好应该也是个技术大牛,现在为数不多真诚的面试官了。(最后讲部门业务都讲了将近20min)。整体答下来八股还行,一些开放性的场景题答的很差,主要是泛泛而谈,微服务的实战经验还是太少了,面试官在场景题时会问还有还有没有其他更好的方案,大部分都答不出来。临场应变能力太差了。还得练。算是最近最有价值的面试了吧。最可惜的点在于已经接了其他公司offer了(在准备入职了),这次面试自己答的很差也没想过这面能过本来想着全当积累经验了,结果隔天居然通知一面过了。考虑了一会以后还是决定放弃后续流程了,考虑到已经接了offer的那家离家也比较近,自己也不想折腾了。只能以进了二面应该也不会通过这样的理由来安慰自己了。&nbsp;有赞这种规模的公司对我的学历来说属于是可遇不可求的机会了,做的业务也很棒,技术也有结合AI,以后不知道还能不能有这样的机会。感觉找实习就是一个患得患失的过程,没找到之前焦虑内耗的不行,找到了又会想要更好的。希望现在错过的以后还有机会遇到吧。
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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