美团2024秋招笔试真题流出……
- 2026-11-06 19:06:02
美团2024秋招笔试真题流出……
匹配职位 Java工程师、C++工程师、iOS工程师、安卓工程师、运维工程师、前端工程师、算法工程师、PHP工程师、测试工程师、安全工程师、golang工程师、测试开发工程师 编程题 ⑤小美的排列构造 小美定义一个数组a的权值计算如下: 首先将a的每一对相邻两项求和,得到一个b数组。那么b数组的最大值减最小值即为a数组的权值。 例如,若a=[2,1,3],那么b=[3,4],b数组的极差是1。因此a数组的权值为1。 现在小美希望你能构造一个长度为n的排列,满足权值尽可能小。你能帮帮她吗? 排列是指一个长度为n的数组,其中1到n每个元素恰好出现一次。 关注牛客app 工作日每天更新 笔试真题&详细答案 
24届春招同行双选会 理工类专业专场,开放报名 👇扫描下方二维码即可报名👇
⬆️点击上方蓝色字,关注牛客app⬆️
查看更多实习校招信息更新

时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 256M,其他语言512M
输入描述:
一个正整数n,代表排列的长度。2≤n≤200000
输出描述:
一个合法的排列。如果有多解输出任意即可。示例1
输入例子:3输出例子:2 1 3例子说明:这个数组的权值为 1。输出[2,3,1]等排列也是合法的。
答案1(作者:longkouding)
import sysfor line in sys.stdin:a = line.split()n = int(a[0])res = [0 for i in range(n)]max_n = nmin_n = 1for i in range(1,n,2):res[i] = max_nmax_n = max_n - 1for i in range(0,n,2):res[i] = min_nmin_n +=1out = " ".join(str(r) for r in res)print(out)
答案2(作者:我嘞个逗)
#include <iostream>#include <vector>using namespace std;void paile(int n, vector<int>& result) {if (n == 1) result[0] = 1;else if (n == 2) {result[0] = 1;result[1] = 2;} else if (n >= 3) {int temp = n / 2 + 1;int num;result[0] = temp;for (int i = 1; i < n; i++) {if (i % 2 == 0) {num = i / 2;result[i] = temp + num;} else {num = i / 2 + 1;result[i] = temp - num;}}}}int main() {int n;cin >> n;vector<int> result(n, 0);paile(n, result);for (int i = 0; i < n; ++i) {cout << result[i] << " ";}return 0;}
答案3(作者:酸菜秋刀鱼)
#include <iostream>#include <vector>using namespace std;int main() {int n;cin >> n;//初始化构造顺序排列vector<int> a;int i = 1, j = n;// int mid = n/2 + 1;while(a.size()<n && i < j ){// 交叉重新排列数组a.push_back(i);a.push_back(j);i++;j--;}a.push_back(i);for(int c = 0; c<n; c++){cout << a[c] << " ";}}// 64 位输出请用 printf("%lld")


百家春招企业,1000+在招职位

本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。