oppo笔试 oppo笔试题 0728

笔试时间:2024年07月28日 提前批

历史笔试传送门:2023秋招笔试合集

第一题

题目:分糖果

小o有三盒糖果,糖果数分别为a,b和c。现在小0又有了x颗糖果,他要把这x颗糖果恰好分到新的k个盒子里面去,保证每一个盒子里至少有一颗糖果。这样他就拥有了k+3盒糖果,然后他会在这k+3盒糖果中挑选出最多的那一盒糖果。显然,x颗糖果分到k个盒子里往往不止一种方案。小0想知道,无论他如何分配这x颗糖果,糖果最多的那一个盒子的编号是否确定目唯一。

输入描述

第一行输入三个整数 a,b和c(1<=a,b,c<=10^9)表示初始三盒糖果的个数。

第二行输入两个整数x和k(1<=k<=x<=10^9)代表小O新获得的糖果个数,和需要新放人糖果的盒子数。

输出描述

如果糖果最多的那一个盒子的编号确定且唯一,输出“YES”,否则,输出“NO”。

样例输入

423

22

样例输出

YES

参考题解

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    vector<int> arr;
    string input_line;
    getline(std::cin, input_line);
    istringstream iss(input_line);
    int num;
    while (iss >> num) {
        arr.push_back(num);
    }

    int x, k;
    cin >> x >> k;

    int max_value = *std::max_element(arr.begin(), arr.end());
    
    // 判断条件并输出结果
    if (max_value > 1 + x - k) {
        cout << "Yes" << std::endl;
    } else {
        cout << "No" << std::endl;
    }
    
    return 0;
}

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.Scanner;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取数组输入
        String[] arrStr = scanner.nextLine().split(" ");
        int[] arr = new int[arrStr.length];
        for (int i = 0; i < arrStr.length; i++) {
            arr[i] = Integer.parseInt(arrStr[i]);
        }
        
        // 读取 x 和 k
        int x = scanner.nextInt();
        int k = scanner.nextInt();
        
        // 找到数组中的最大值
        int maxValue = Arrays.stream(arr).max().getAsInt();
        
        // 判断条件并输出结果
        if (maxValue > 1 + x - k) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }
        
        scanner.close();
    }
}

Python:[此代码未进行大量数据的测试,仅供参考]

arr = [int(c) for c in input().split()]
x,k = map(int, input().split())
if max(arr) > 1 + x-k:
    print("Yes")
else:
    print("No")

第二题

题目

小o有两个长度为n的数组,现在她想从这两个数组中分别选出一个非空子序列,使得从第一个数组中选出的子序列的最大值不大于从第二个数组中选出的子序列的最小值。小o想知道两个子序列的长度之和最大是多少。如果数组a可以通过删除数组b中的若干(可能为零或全部)元素得到,则数组 a是数组b的子序列。

输入描述

第一行输入一个整数n(l<=n<=10^5)代表数组的长度。

第二行输入几个整数a1,a2,...,an(1<=ai<=10^9)代表第一个数组。

第三行输入几个整数b1,b2,…,bn(1<=bi<=10^9)代表第二个数组。

输出描述

在一行上输出一个整数,表示两个子序列的长度之和最大是多少。如果无法选出满足条件的子序列,则输出-1。

样例输入

4

1 2 3 4

3 4 5 6

样例输出

7

参考题解

二分+枚举。首先将两个数组排序。要找到所有满足条件最长的那个,我们可以通过枚举第一个数组中的最大值来进行。假设枚举当前第一个数组的最大值为a,那么二分来找到第二个数组中,大于等于a的最小值,叠加这两个子序列的长度,更新最大值即可。

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    int n;
    std::cin >> n;

    std::vector<int> A(n), B(n);
    for (int i = 0; i < n; ++i) std::cin >> A[i];
    for (int i = 0; i < n; ++i) std::cin >> B[i];

    std::sort(A.begin(), A.end());
    std::sort(B.begin(), B.end());

    int ans = 0;

    for (int i = 0; i < n; ++i) {
        int a = A[i];
        int l = 0, r = n;
        while (l < r) {
            int mid = (l + r) / 2;
            if (B[mid] >= a) r = mid;
            else l = mid + 1;
        }
        ans = std::max(ans, i + 1 + n - r);
    }

    std::cout << a

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

2024 BAT笔试合集 文章被收录于专栏

持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。

全部评论
佬,oppo技术笔试只有算法题吗
点赞 回复 分享
发布于 08-10 08:53 浙江

相关推荐

工作基本定了,比较满意。这深度学习真是难搞啊,论文看不懂,代码看不懂,不会改,创新点???&nbsp;还有一个月中期,怎么搞,已经抑郁了,没有小论文要求,我真是非常幸运了,不然就我这科研能力…………&nbsp;感觉自己对自己失去信心,无时无刻不在否定自己取得一些成绩都是运气好罢了,真的能顺利毕业吗?严重内耗、无力感爆棚啊…………
AI牛可乐:哎呀,听起来你最近压力好大呀,毕业论文和工作的双重压力一定让你感觉像是背了两座山呢。深度学习确实挺复杂的,就像是要在一片迷雾中找到出路一样。但是,你已经很棒了,工作都定好了,这是很大的成就呢! 论文的事情,别太担心。每个人都有看不懂代码和论文的时候,这是正常的。至于创新点嘛,有时候灵感就像小猫一样,需要一点一点地哄出来的。你可以先试试把你看过的资料整理一下,说不定就能找到新的思路呢。 中期答辩前,你可以列个计划,一步一步来,把大问题分解成小问题,一点一点克服。记得,你不是一个人在战斗,你的导师、同学都是你的战友哦。 至于信心嘛,别否定自己,每个人都会有低谷的时候。你已经取得的成绩,都是你实力的体现。毕业不是问题,只要你不放弃,就一定能顺利走过去的。加油哦,我相信你可以的! 对了,如果你愿意的话,可以点击我的头像,我们私信聊,也许我能帮你出出主意,或者就是简单地聊聊天,分散一下你的注意力也好呀。🐮💪🌟
点赞 评论 收藏
分享
10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
11-14 16:13
已编辑
重庆科技大学 测试工程师
Amazarashi66:不进帖子我都知道🐮❤️网什么含金量
点赞 评论 收藏
分享
评论
5
17
分享
牛客网
牛客企业服务