【秋招笔试】2025.08.02OPPO秋招笔试改编题

✅ 秋招备战指南 ✅

💡 学习建议:

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

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

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

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

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

题目一:小兰的魔法宝石收集

1️⃣:遍历数组,找出编号为 的倍数的宝石

2️⃣:计算这些宝石的魔法值总和,判断是否能被 整除

难度:简单

这道题目考查基本的遍历和取模运算。关键在于理解编号从 开始,需要正确判断哪些位置的元素需要累加。通过一次遍历即可解决,时间复杂度为

题目二:小毛的团队资源分配

1️⃣:理解问题本质,将 转化为

2️⃣:对员工能力值进行排序

3️⃣:选择最大的 个作为第一组,最小的 个作为第三组

难度:中等

这道题目的关键在于数学推导和贪心策略。通过分析绝对值表达式的性质,发现最优解就是让能力最强和最弱的员工分别组队,从而最大化差值。

题目三:小柯的数据异常检测

1️⃣:利用前缀和的奇偶性来判断子数组和的奇偶性

2️⃣:预处理每个位置的奇数/偶数前缀数量

3️⃣:通过计算区间内奇数前缀和偶数前缀的乘积得到答案

难度:中等偏难

这道题目需要深入理解前缀和与子数组和的关系,以及奇偶性的数学性质。通过巧妙的预处理,将每次查询的时间复杂度降至 ,体现了算法优化的重要性。

01. 小兰的魔法宝石收集

问题描述

小兰在一个神秘的洞穴中发现了 颗魔法宝石,每颗宝石都有不同的魔法值。这些宝石按照发现的顺序排列成一行,编号为

根据古老的传说,只有当收集到的宝石编号是 的倍数时,这些宝石才会释放出强大的魔法能量。小兰想要知道,如果她收集所有编号为 的倍数的宝石,这些宝石的总魔法值是否能够被 整除。如果能被 整除,说明这些宝石之间存在神奇的共鸣,可以发挥出更强大的力量。

输入格式

第一行包含一个正整数 ),表示宝石的总数量。

第二行包含 个正整数 ),表示每颗宝石的魔法值。

输出格式

如果编号为 的倍数的宝石的总魔法值能被 整除,输出 Yes;否则输出 No

样例输入

6
1 2 3 4 5 6

样例输出

Yes
样例 解释说明
样例1 编号为 的倍数的宝石是第 颗和第 颗,魔法值分别为 ,总和为 ,能被 整除,所以输出 Yes

数据范围

题解

这道题的核心思路很直接:找出所有编号为 的倍数的宝石,计算它们的魔法值总和,然后判断这个总和是否能被 整除。

关键观察:我们只需要遍历一遍数组,当遍历到第 个宝石时( 开始计数),如果 能被 整除,就将该宝石的魔法值加到总和中。最后用取模运算判断总和是否能被 整除。

算法步骤:

  1. 初始化总和 sum = 0
  2. 遍历数组,对于第 个宝石( 开始):
    • 如果 ,则 sum += a[i]
  3. 判断 sum % 3 是否等于

时间复杂度:,只需要遍历一遍数组。 空间复杂度:,只需要常数级别的额外空间。

参考代码

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

def solve():
    n = int(input())
    gems = list(map(int, input().split()))
    
    # 计算编号为3的倍数的宝石魔法值总和
    total = 0
    for i in range(n):
        if (i + 1) % 3 == 0:  # i+1是宝石的编号(从1开始)
            total += gems[i]
    
    # 判断总和是否能被3整除
    if total % 3 == 0:
        print("Yes")
    else:
        print("No")

if __name__ == "__main__":
    solve()
  • Cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n;
    cin >> n;
    
    int sum = 0;  // 存储编号为3倍数的宝石魔法值总和
    for (int i = 1; i <= n; i++) {
        int val;
        cin >> val;
        if (i % 3 == 0) {  // 如果编号是3的倍数
            sum += val;
        }
    }
    
    // 判断总和是否能被3整除
    cout << (sum % 3 == 0 ? "Yes" : "No") << endl;
    
    return 0;
}
  • Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int n = sc.nextInt();
        int sum = 0;  // 存储编号为3倍数的宝石魔法值总和
        
        for (int i = 1; i <= n; i++) {
            int gemVal = sc.nextInt();
            if (i % 3 == 0) {  // 如果编号是3的倍数
                sum += gemVal;
            }
        }
        
        // 判断总和是否能被3整除
        if (sum % 3 == 0) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }
        
        sc.close();
    }
}

02. 小毛的团队资源分配

问题描述

小毛是一家科技公司的项目经理,他手下有 名员工,每名员工都有不同的工作能力值。现在公司要启动一个重要项目,需要将这些员工平均分成三个小组来负责不同的模块开发。

为了保证项目的成功,小毛希望各个小组之间的能力差距尽可能大,这样可以让每个小组都有明确的定位和专业方向。具体来说,如果将三个小组的总能力值分别记为 ,小毛希望最大化表达式 的值。

请你帮小毛计算出这个表达式的最大可能值。

输入格式

第一行包含一个正整数 ),表示员工的总数。题目保证 的倍数。

第二行包含 个正整数 ),表示每名员工的工作能力值。

输出格式

输出一个整数,表示 的最大可能值。

样例输入

3
1 2 3

样例输出

3
样例 解释说明
样例1 三个员工能力值为 ,最优分组方案是:第一组 ,第二组 ,第三组 ,此时 。但还有更好的方案:第一组 ,第二组 ,第三组 ,此时

数据范围

  • 的倍数

题解

这道题的关键在于理解如何最大化 这个表达式。

不妨设 ,那么原表达式就变成了

要让 最大,显然应该让 尽可能大, 尽可能小。由于每组的人数必须相等(都是 人),最优策略就是:

  • 第一组选择能力值最大的 个员工
  • 第三组选择能力值最小的 个员工
  • 第二组选择剩余的 个员工

这样安排能够保证 达到最大值, 达到最小值,从而使 最大。

算法步骤:

  1. 对所有员工的能力值进行排序
  2. 计算前 个最小值的和作为
  3. 计算后 个最大值的和作为
  4. 返回

时间复杂度:,主要消耗在排序上。 空间复杂度:,只需要常数级别的额外空间。

参考代码

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

def solve():
    n = int(input())
    vals = list(map(int, input().split()))
    
    # 对能力值进行排序
    vals.sort()
    k = n // 3
    
    # 计算最小的k个值的和
    min_sum = sum(vals[:k])
    # 计算最大的k个值的和  
    max_sum = sum(vals[-k:])
    
    # 返回最大差值
    print(max_sum - min_sum)

if __name__ == "__main__":
    solve()
  • Cpp
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n;
    cin >> n;
    vector<ll> vals(n);
    
    for (int i = 0; i < n; i++) {
        cin >> vals[i];
    }
    
    // 对能力值进行排序
    sort(vals.begin(), vals

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

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

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

全部评论

相关推荐

时间线:9月初收集信息,在牛客小红书上调研了下哪些公司允许非全实习,目标北京,不在北京不考虑bg:双非全日制,本科非科班,985非全日制,软件工程硕士,属于跨专业考研没考上然后调剂的反面教材,大家看个乐呵吧,失败总是伴随人生,哦对了大四那年还在大疆实习了几个月来着,所以还有一段大厂实习,然后暑假自我反思做了个比较牛逼的项目,目前看还是有点用的,至少面试都能过基本上,秋招不太确定,实习的话基本都没啥问题吧。排除:美团,阿里,网易,确定:快手(boss投递,hr说不行,实测中),小红书(官网投递简历没人看)不确定:字节(boss投递,本人实测无法入职),百度(boss投递,本人实测无法入职),腾讯...
产品产品冲冲冲:快手这个不是可以吗?你调剂非全肯定没有交过社保啊?在读证明每个学校的自助机器上都可以打印的。百度也是可以的,可以让hr再去了解一下,牛客上都有人非全实习还转正了。网易可以实习,我刚刚实习完,走的特批流程,特别是互娱是文件里写明白了收的,其他的走特批。你都通过这么多了说明能力很优秀,不要太消极了哥们,很多都可以的加油啊
查看5道真题和解析
点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

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