2023 科大讯飞笔试题 非凡计划 0729

笔试时间:2023年7月29日 非凡计划

第一题

题目:将企鹅击落水中最小的力

牛牛发明了一款破冰行动的游戏,假设在河面上,有n块紧密相连的冰块。标号1-n。将一只企鹅放到任意一个标号为K的冰块上,现在通过打破一些冰块来使得企鹅掉落河中,然而他无法打破企鹅所踩的冰块k。每个冰块都有不同的强度Ai ,所以需要一个等于Ai的力来打破冰。当冰块(两侧的冰块都没有与河两岸连接时,则冰块会掉落到河中。冰块1和冰块4可以通过分别施加7和2的力来打破,此时企鹅所在的冰块2和冰块3一起掉落河中。所以企鹅将落下。所以,可以使企鹅掉落的最小力是2+7=9。

输入描述

第一行给出n,表示冰块的数量。第二行中,按顺序给出代表打破第i块冰块所需的力的Ai。题目保证企鹅所在的地方用-1表示,没有企鹅位于冰块1或冰块n的情况。3<=n<=2*10^5

1<=Ai<=10^9

输出描述

输出可以击落企鹅到水中的最小力。

样例输入

5

7 -1 6 2 5

样例输出

9

找到-1的位置且找到该位置坐标的最小值和右边的最小值之和即可。

参考题解

C++:

#include <iostream>
#include <vector>

int main() {
    int n;
    std::cin >> n;
    std::vector<int> a(n);

    for (int i = 0; i < n; i++) {
        std::cin >> a[i];
    }

    for (int i = 0; i < n; i++) {
        if (a[i] == -1) {
            int p1 = i - 1, p2 = i + 1;
            int min1 = INT_MAX, min2 = INT_MAX;

            while (p1 >= 0) {
                min1 = std::min(min1, a[p1--]);
            }

            while (p2 < n) {
                min2 = std::min(min2, a[p2++]);
            }

            std::cout << min1 + min2 << std::endl;
            return 0;
        }
    }

    return 0;
}

Java:

import java.util.*;

class Main {
    public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a  = new int[n];
        for (int i = 0 ; i < n ; i++) a[i] = sc.nextInt();

        for (int i = 0 ; i < n ; i++) {
            if (a[i] == -1) {
                int p1 = i-1, p2 = i+1;
                int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;
                while (p1 >= 0) {
                    min1 = Math.min(min1, a[p1--]);
                }
                while (p2 < n) {
                    min2 = Math.min(min2, a[p2++]);
                }
                System.out.println(min1 + min2);
                return;
            }
        }

    }
}

第二题

题目:数组的最小距离

小红定义两个数组之间的距离为

\sum_{i=1}^{n}{\left| a_{i} - b_{i} \right|}

即每个位置的差的绝对值之和。小红现在可以进行任意次操作,选择任意数组的任意一个元素,使其乘以-1。小红希望最终两个数组的距离尽可能小。你能帮帮她吗?

输入描述

第一行输入一个正整数, 代表两个数组的长度。第二行输入n个

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

2023 秋招笔试题汇总解析 文章被收录于专栏

2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

全部评论

相关推荐

朱宝12138:第二题我是从0下标找到第一个回文(i,j)之后,从下标 j + 1 重新开始找,这样能确保找到的两个区间不重合,然后找到两个回文就break,理说如果字符串特别长又没有回文也会超时,但是这样优化后a了
查看3道真题和解析 投递米哈游等公司9个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务