顺丰笔试 顺丰秋招 0913

笔试时间:2025年9月13日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题:平衡树

小明有一个数组a,长度为n(保证n是奇数)。其中的中位数定义为:如果将这个数组排序,则最中间的那个元素即为中位数。小明每次可以选择数组中的一个数,将它加1或减1。他想知道,最少经过多少次这样的操作,可以让这个数组的中位数变成m。

输入描述

第一行一个整数T,表示数据组数。对每组数据:

  • 第一行两个整数n,m,表示数组大小和期望的中位数
  • 第二行n个整数a[i],表示数组初始状态

输出描述

对于每组数据,输出一行一个整数,表示答案。

样例输入

2

5 3

1 2 2 4 5

7 10

8 5 8 11 8 67 15

样例输出

1

2

对于第一组样例,把任意一个2增加1即可。

参考题解

解题思路:

  1. 首先对数组进行排序
  2. 中位数的位置固定为n/2
  3. 根据当前中位数与目标值m的关系:
  4. 如果当前中位数小于m,需要将中位数及其右边小于m的元素都调整到m
  5. 如果当前中位数大于m,需要将中位数及其左边大于m的元素都调整到m
  6. 如果相等,则不需要操作

C++:

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int T;
    cin >> T;
    
    while (T--) {
        int n, m;
        cin >> n >> m;
        vector<int> a(n);
        
        for (int i = 0; i < n; i++) {
            cin >> a[i];
        }
        
        sort(a.begin(), a.end());
        int midIndex = n / 2;
        long long operations = 0;
        
        if (a[midIndex] < m) {
            for (int i = midIndex; i < n; i++) {
                if (a[i] < m) {
                    operations += (m - a[i]);
                } else {
                    break;
                }
            }
        } else if (a[midIndex] > m) {
            for (int i = midIndex; i >= 0; i--) {
                if (a[i] > m) {
                    operations += (a[i] - m);
                } else {
                    break;
                }
            }
        }
        
        cout << operations << "\n";
    }
    
    return 0;
}

Java:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        
        while (T-- > 0) {
            int n = sc.nextInt();
            int m = sc.nextInt();
            int[] a = new int[n];
            
            for (int i = 0; i < n; i++) {
                a[i] = sc.nextInt();
            }
            
            Arrays.sort(a);
            int midIndex = n / 2;
            long operations = 0;
            
            if (a[midIndex] < m) {
                for (int i = midIndex; i < n; i++) {
                    if (a[i] < m) {
                        operations += (m - a[i]);
                    } else {
                        break;
                    }
                }
            } else if (a[midIndex] > m) {
                for (int i = midIndex; i >= 0; i--) {
                    if (a[i] > m) {
                        operations += (a[i] - m);
                    } else {
                        break;
                    }
                }
            }
            
            System.out.println(operations);
        }
        
        sc.close(

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

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

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

全部评论

相关推荐

09-12 12:30
已编辑
南京大学 Java
云证之后就是漫长的等待teg今年没有意向直接泡池子泡到开奖,有点怕会不会直接泡死了,被排序的日子究竟什么时候是个头啊8.25&nbsp;云架平存储团队&nbsp;一面当时这个部门捞了一万个人面试😂我的面试都排在一周之后了1.&nbsp;自我介绍2.&nbsp;实习3.&nbsp;rpc怎么决定将请求发往哪一台机器4.&nbsp;一致性哈希的使用场景5.&nbsp;手撕5.1&nbsp;复原ip地址。一些边界条件没考虑到,磕磕绊绊做出来了5.2&nbsp;原创题,很大的日志文件,每行有id&nbsp;时间戳&nbsp;操作(登陆or登出),文件很大不能全部读入内存。要求计算同一时间的最大在线人数6.&nbsp;你实习用到了s3,说下为什么要用7.&nbsp;假如微信发消息要过滤屏蔽词,如何设计(ac自动机,这题pass了)8.&nbsp;设计一个纯内存型KV缓存,要求线程安全,并且有持久化策略(这里和面试官battle了好久,主要聚焦于持久化策略如何保证数据不丢失,追问了好多)虽说一些地方比较磕绊但总体上还是全答出来了。面完大概过了一两天收到了面试体验反馈邮件,小一周后挂复活赛9.3&nbsp;混元机平&nbsp;一面1.&nbsp;自我介绍2.&nbsp;面试官介绍了下业务3.&nbsp;几乎全程问字节实习,讲了项目架构和业务流程,针对一些细节做了追问4.&nbsp;手撕:LRU和课程表II,出完题面试官就干别的去了,大概40分钟之后回来,简单问了问写的咋样就反问然后结束了当天晚上官网流程变复试9.8&nbsp;混元机平&nbsp;二面面试给我约到了晚上九点,而且邮件上显示的面试时间只有半个小时。面之前一直在怀疑是不是kpi面1.&nbsp;没有自我介绍,面试官介绍业务2.&nbsp;手上有offer吗(说字节意向,然后明显看到面试官虎躯一震😂)3.&nbsp;问了下为什么字节和美团两段实习都这么短4.&nbsp;字节实习主要做了哪些事情,你主要负责哪些部分5.&nbsp;你们的做的workflow,和agent有什么区别6.&nbsp;技术上怎么解决问题的?高并发怎么解决?7.&nbsp;手撕:两个线程不断的把随机字符串放入公共队列,第三个线程依次取出并打印前面聊的挺好的,但是手撕部分面试官只给了大概十五分钟左右时间,写的时候犯了低级错误自己还没意识到,导致运行不起来面试官不等了,最后确认了下我的意向base面试就结束了,无反问,整场面试只有40min左右面完之后觉得凉凉了,结果第二天早上官网流程状态变成hr面(?????)9.12&nbsp;混元机平&nbsp;hr面1.&nbsp;经历前两轮的面试,对团队和业务有了解吗2.&nbsp;我们的方向和你的规划相吻合吗3.&nbsp;自我介绍4.&nbsp;对毕业之后期望从事的工作方向怎么考虑5.&nbsp;找工作看重哪些因素6.&nbsp;根据你的过往经历,有哪些突破困难达成目标的工作或项目7.&nbsp;根据你的过往经历,有哪些努力了但结果不尽人意的工作或项目8.&nbsp;成长压力最大的阶段是在什么时期9.&nbsp;你熟悉的人如何评价你?10.&nbsp;有没有直系亲属在tx工作?11.&nbsp;有哪些其它offer面完一个半小时后转录用评估不知道为什么只有两轮技术面。不过混元的面试能感觉到面试官对我自身的关注度是比较高的,前面聊的都挺合得来,不像云架平存储的面试那样大部分都对着题库出题。可惜部分手撕环节出了问题,虽然给过了不知道会不会导致排序靠后
iori2333:跟楼主经历几乎完全一样,先背云架平存储kpi面挂,再被混元捞,现在还在录用评估(
查看27道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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