字节跳动 - BSP驱动开发工程师 - 笔试

❗❗如果本文对您有帮助,请不要吝啬您的评论、点赞、收藏与小花,这对我非常重要!谢谢!❗❗

alt

本文所涉及的题目均为基于个人学习和理解重新表述的内容,仅供学习交流之用,不代表任何实际考试题目。如有雷同,纯属巧合。

岗位:BSP驱动开发工程师-OS

题型:4 道编程题

1、编程题

1.1

小红的三消游戏:

小红在玩一个三消游戏,游戏中 n 个球排成一排,每个球都有一个颜色。若有 3 个颜色相同的球连在一起,则消除这 3 个球,然后剩下的球会重新连在一起。在没有 3 个颜色相同的球连在一起时,小红可以在任意一个球的左边(或右边)添加一个任意颜色的球。

小红觉得这个游戏很难,因此她准备按任意顺序重新排序这 n 个球。小红想知道在她重新排序这 n 个球后,最少需要添加多少个球才可以消除所有的球。

输入描述:

第一行输入 1 个整数 n(1 ≤ n ≤ 10^5),表示球的数量。
第二行输入 n 个整数 ai(1 ≤ a ≤ 10^9),表示每个球的颜色。

输出描述:

输出一个整数表示答案。

示例:

输入:
6
3 1 2 3 1 3

输出:3

说明:
重新排序成 [1,2,1,3,3,3],3 个颜色为 3 的球可以直接消除,变成 [1,2,1]然后在第 1 个球右边增加 2 个颜色为 2 的球,变成 [1,2,2,2,1],消除 3 个颜色为 2 的球;最后在第 1 个球左边增加 1 个颜色为 1 的球,变成 [1,1,1],消除 3 个颜色为 1 的球。

解答:

#include <stdio.h>
#include <stdlib.h>

int compare(const void* a, const void* b) 
{
    return (*(int*)a - * (int*)b);
}

int minAdditions(int* arr, int n) 
{
    int count = 0;

    qsort(arr, n, sizeof(int), compare);

    for (int i = 0; i < n; ) 
    {
        int j = i;
        while (j < n && arr[j] == arr[i]) {
            j++;
        }

        int length = j - i;

        if (length < 3) {
            count += 3 - length;
        }

        i = j;
    }

    return count;
}

int main() {
    int n;

    scanf("%d", &n);

    int arr[n];

    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    int result = minAdditions(arr, n);
    printf("%d\n", result);

    return 0;
}

1.2

小红的特殊数组:

小红定义一个数组为特殊数组:这个数组大小至少为 3 ,只由两种数字组成,且其中一种数字恰好出现一次。例如:[1,1,4][1,4,1] 是特殊数组(长度为 3,只有 1 和 4 组成且 4 恰好出现一次),[1,4][5,1,4][1,1,1] 都不是特殊数组。

小红有一个长度为 n 的数组 a,她想知道这个数组有多少个子数组是特殊数组。

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

欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务