oppo笔试 oppo笔试题 0814

笔试时间:2024年08月14日 研发

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

第一题

题目

有一个无限大的二维平面,上面有小O的两个机器人 A,B,其坐标分别为 (x1, y1) 和 (x2, y2),小O现在可以操作任意一个机器人进行移动。具体的,每次移动,被选择的机器人都可以选择四个方向(“上”,“下”,“左”,“右”,)之一,移动一个距离。小O想知道,将两个机器人移动至同一个格子,最少需要几次移动。

输入描述

在一行上输入四个整数x1, x2, y1 和 y2 (1 ≤ x1, y1, x2, y2 ≤ 10^9) 代表两个机器人初始所在的位置。

输出描述

对于每一组测试数据,在一行上输出一个整数,代表将两个机器人移动到同一格子的最小操作次数。

样例输入

1 1 2 3

样例输出

3

说明

将机器人 A 向右移动一次,机器人 B 向下移动两次即可将两个机器人移动至同一格子。

参考题解

水平方向和垂直方向上的距离,然后将这两个距离相加,即可得到最少的移动次数。

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

#include <iostream>
#include <cmath> // 用于 abs 函数

int main() {
    int x1, y1, x2, y2;
    while (std::cin >> x1 >> y1 >> x2 >> y2) {
        std::cout << std::abs(y2 - y1) + std::abs(x2 - x1) << std::endl;
    }
    return 0;
}

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

import java.util.Scanner;

public class Main {
    public static void main(string[] args){
        Scanner in=new Scanner(System.in);
        while(in.hasNextInt()){
            int x1=in.nextInt();
            int y1=in.nextInt();
            int x2=in.nextInt();
            int y2=in.nextInt();
            System.out.println(Math.abs(y2-y1)+Math.abs(x2-x1));
        }
    }
}

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

import sys

for line in sys.stdin:
    x1, y1, x2, y2 = map(int, line.split())
    print(abs(y2 - y1) + abs(x2 - x1))

第二题

题目

小O有一个仅包含小写字母的字符串,如果一个字符串某个字母出现次数严格大于其他字母出现次数之和,那么这个字符串就是一个好串。小O想删除字符串中的一些字符,使得剩下的字符串是一个好串,问最少删除多少个字符。

输入描述

在一行上输入一个长度不超过 10^5,且仅包含小写字母的字符串s。

输出描述

在一行上输出一个整数,代表最少删除多少个字符。

样例输入一

aaabcd

样例输出一

1

说明:删除一个字符‘b’,剩下的字符串为“aaacd”,是一个好串。

样例输入二

acmmca

样例输出二

3

参考题解

统计每个字符出现的次数,并找到出现次数最多的字符。如果该字符的出现次数超过字符串长度的一半,则它已经是一个“好串”,不需要删除任何字符。否则,就需要删除一些字符使得某个字符的出现次数能够严格大于其他字符出现次数之和,假设出现次数最多的字符的次数为 count,字符串的总长度为 n,那么需要满足:count > (n - count) - x,只需要删除 n−2×count+1 个字符即可(+1是为了满足严格大于其他字符数)。

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

#include <iostream>
#include <map>
#include <string>
#include <algorithm>

int main() {
    std::string str;
    while (std::cin >> str) {
        std::map<char, int> map;
        int count = 0;
        for (char c : str) {
            int temp = map[c] + 1;
            map[c] = temp;
            count = std::max(count, temp);
        }
        if (str.length() == 0 || count > str.length() / 2) {
            std::cout << 0 << std::endl;
        } else {
            std::cout << str.length() - 2 * count + 1 << std::endl;
        }
    }
    return 0;
}

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

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);//注意 hasNext 和 hasNextLine 的区别
        while(in.hasNext()) {// 注意 while 处理多个 case
            String str = in.next();
            Map<Character, Integer> map = new HashMap<>();
            int count = 0;
            for(int i = 0;i< str.length(); i++) {
                char c = str.charAt(i);
                int temp = map.getOrDefault(c, 0) + 1;
                map.put(c, temp);
                count = Math.max(count, temp);
         }
         System.out.println(str.length() == 0 || count > str.length() / 2 ? 0 : str.length() - 2 * count + 1);
        }
    }
}

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

import sys
from collections import defaultdict

for line in sys.stdin:
    str = line.strip()
    map = defau

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

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

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

全部评论

相关推荐

点赞 2 评论
分享
牛客网
牛客企业服务