科大讯飞笔试 科大讯飞笔试题 0330

笔试时间:2025年03月30日

历史笔试传送门:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题

题目:提取中位数

给出一个长度为 n 的序列 a1,a2,a3⋯a**n,请你按照以下规则输出序列的中位数:如果序列的大小为奇数,则中位数是按照升序排序后中间的数字。如果序列的大小为偶数:按照升序排序后,中间的两个数字 x=y时,输出任意一个即可;按照升序排序后,中间的两个数字 x\=y时,输出 min(x,y),即 x和 y中较小的那个数。当输出中位数 mid_x时,该中位数 mid_x从序列 a中消失,再输出消失后的序列 a′ 中位数。重复上述步骤,直至全部将序列 a全部输出。

输入描述

第一行输入一个正整数 n(1≤n≤105) 代表序列长度。

第二行输入 n个正整数 a1,a2,⋯,a^n (1≤a^i≤109) 代表序列元素。

输出描述

在一行上输出 n个整数代表依次提取出的中位数。

样例输入

4

1 9 8 5

样例输出

5 8 1 9

参考题解

要动态提取中位数并维护剩余序列的中位数。核心思路是预先排序数组,然后通过双指针模拟动态删除中位数的过程。排序预处理首先对数组进行排序,便于后续快速定位中位数。奇偶分类处理奇数长度:直接取中间元素作为第一个中位数,剩余元素分为左右两部分,用双指针交替取元素。偶数长度:取中间左侧较小元素作为第一个中位数,随后左右指针分别向两侧扩展,交替取元素。双指针模拟删除利用左右指针动态维护剩余元素的边界,每次取完一个中位数后,指针向两侧移动以模拟删除操作。

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

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

using namespace std;

void extract_medians() {
    int n;
    cin >> n;
    vector<int> nums(n);
    for (int i = 0; i < n; ++i) {
        cin >> nums[i];
    }

    sort(nums.begin(), nums.end());
    vector<int> result;

    if (n % 2 == 1) {  // Odd length
        int mid = n / 2;
        result.push_back(nums[mid]);
        int left = mid - 1;
        int right = mid + 1;
        for (int i = 0; i < (n - 1) / 2; ++i) {
            result.push_back(nums[left]);
            left--;
            result.push_back(nums[right]);
            right++;
        }
    } else {  // Even length
        int left = (n / 2) - 1;
        int right = n / 2;
        for (int i = 0; i < n / 2; ++i) {
            result.push_back(nums[left]);
            left--;
            result.push_back(nums[right]);
            right++;
        }
    }

    for (int i = 0; i < result.size(); ++i) {
        cout << result[i] << " ";
    }
    cout << endl;
}

int main() {
    extract_medians();
    return 0;
}

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

import java.util.*;

public class Main {
    public static void extractMedians() {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] nums = new int[n];
        
        for (int i = 0; i < n; ++i) {
            nums[i] = scanner.nextInt();
        }

        Arrays.sort(nums);
        List<Integer> result = new ArrayList<>();

        if (n % 2 == 1) {  // Odd length
            int mid = n / 2;
            result.add(nums[mid]);
            int left = mid - 1;
            int right = mid + 1;
            for (int i = 0; i < (n - 1) / 2; ++i) {
                result.add(nums[left]);
                left--;
                result.add(nums[right]);
                right++;
            }
        } else {  // Even length
            int left = (n / 2) - 1;
            int right = n / 2;
            for (int i = 0; i < n / 2; ++i) {
                result.add(nums[left]);
                left--;
                result.add(nums[right]);
                right++;
            }
        }

        for (int num : result) {
            System.out.print(num + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        extractMedians();
    }
}

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

def extract_medi

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

2025 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

头像
10-16 00:55
武汉大学 Java
本来4月份能投,但是因为要本科成绩单所以放弃了(实在是没找着)。后面得知随便上传一个空白文档就好,所以9月份投了一下TP。TP学历厂也是名声在外了,楼主对TP还是有一定牵念的,楼主23年本科毕业时因为在考研,所以也确实有打算过没考上就去TP的,而23年的TP也有了著名的卡10%试用期不过的案例(虽然相较于很多公司,比如24年新华三毁意向还是要好一点的)。TP还有个负责海外业务的联州(也就是俗称的小TP)据说会比大TP工作强度好上一点,但说来说去楼主现在投他也只是求保底罢了,楼主投TP的时候联州还没有开秋招,就算了。TP的笔试系统是自己写的,有点古老,也不安全。也许监控了浏览器切换选项卡的行为,也许没有,反正没警告。总之在今年这个情况下,这种笔试算变相鼓励作弊罢,不过反正TP也不看这个。————————————————————一面—————————————————————1.&nbsp;自我介绍2.&nbsp;开源经历+计算机学习经历盘点3.&nbsp;成绩排名,本科排名,考研分数4.&nbsp;比赛经历盘点5.&nbsp;最近写什么代码6.&nbsp;C++怎么Debug内存泄露(开个Sanitizer,顺便说了几句AddressSanitizer原理在于替换指令和设置poison区)7.&nbsp;浏览器输入网址涉及到的协议(经典问题,不写回答了)8.&nbsp;有什么兴趣爱好(编程)9.&nbsp;最近写了多少行代码无反问,没关系,楼主本来也不知道要问啥。反正TP进去也是统一分配,这点楼主已经知道很久了。————————————————————二面—————————————————————1.&nbsp;自我介绍2.&nbsp;自我经历盘点3.&nbsp;做题,面试官共享屏幕,打开word文档(有一点点。无言)4.&nbsp;Rand5生成Rand75.&nbsp;25个样品挑不知轻重的次品,最少比多少次6.&nbsp;对某个数据按日期排序(没看懂,反正就说了各种排序的局限和优点)7.&nbsp;非hot100算法题,忘了,楼主本来想写个暴力解,面试官不满,提醒了楼主思路,然后楼主才写出来。无反问。出不是hot100的题不能让TP面试变得更加别具一格,望周知。主要是楼主作为算法低手被刺激到了。————————————————————三面—————————————————————1.&nbsp;自我介绍2.&nbsp;自我经历盘问3.&nbsp;研究生做啥课题,成果怎么样(超过sota了,ccf-b在投,虽然第二点是假的,数据集怎么来的(自己标,合格的牛马应该学会自己标数据自己提创新点然后自己炼模型)4.&nbsp;讲一讲自己的学习路径与能力框架(楼主会前后端开发,但是一时间没组织好怎么说明自己的后端能力,说到底crud的能力框架是什么呢,是说会几种不同的db、消息队列和中间件吗?总之楼主只是继续说了一顿db相关的能力框架)5.&nbsp;你都是自学为主的吗?(是的)6.&nbsp;我们的业务也不会很复杂,你来我们这边之后打算怎么上手这块呢(找ld跟mt拉通对齐,打造自我闭环能力)7.&nbsp;你未来的职业规划(与公司共同成长,短期内向做到将自己的技术与业务相结合,其他的进公司再说)8.&nbsp;你手里有其他offer了吗(没有的,被JD挂怕了,楼主以后全都说没其他offer)9.&nbsp;对深圳什么看法(很好,楼主看着你们长大的)10.&nbsp;有没有自己的兴趣爱好(编程)。楼主说“说来你可能不信”,但面试官表示相信。无反问。被问过太多兴趣爱好了,从考研复试开始楼主就一直在说自己的爱好是编程,楼主累了,正好今年楼主的唱歌技巧突飞猛进,以后楼主要说自己的爱好是唱歌,再问楼主楼主就给你唱孤勇者🎵。————————————————————座谈会—————————————————————咨询了群友得知座谈会不需要发言,只有一个HR在那里叭叭。所以楼主一边挂着座谈会,一边面了小米澎湃OS内核(这个经历也是有点节目效果的,但是保护楼主隐私还是不写面经了)。总结一下,TP学历厂名副其实,至少三个面试都是半小时,也没有任何刁钻的题(非hot100算法题也许算一个)。大家也都和和气气的面,挺好的。也许入职了会有很多鸡飞狗跳的事,但是能不能给楼主一个保底的offer球球了🥺。
查看23道真题和解析
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

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