网易笔试题-疯狂的队列
来源:互联网 发布:传感器 java 编辑:程序博客网 时间:2024/06/05 19:07
题目
小易老师是非常严厉的,它会要求所有学生在进入教室前都排成一列,并且他要求学生按照身高不递减的顺序排列。有一次,n个学生在列队的时候,小易老师正好去卫生间了。学生们终于有机会反击了,于是学生们决定来一次疯狂的队列,他们定义一个队列的疯狂值为每对相邻排列学生身高差的绝对值总和。由于按照身高顺序排列的队列的疯狂值是最小的,他们当然决定按照疯狂值最大的顺序来进行列队。现在给出n个学生的身高,请计算出这些学生列队的最大可能的疯狂值。小易老师回来一定会气得半死。 输入描述:输入包括两行,第一行一个整数n(1 ≤ n ≤ 50),表示学生的人数第二行为n个整数h[i](1 ≤ h[i] ≤ 1000),表示每个学生的身高输出描述:输出一个整数,表示n个学生列队可以获得的最大的疯狂值。如样例所示: 当队列排列顺序是: 25-10-40-5-25, 身高差绝对值的总和为15+30+35+20=100。这是最大的疯狂值了。示例1输入55 10 25 40 25输出100
基本思想:
采用贪心算法,每次从队列中取出最大值和最小值排在一起,然后再从队列取出次小值和次大值,次小值排在最大值旁边,次大值排在最小值旁边,依次类推,直到取出所有数。需要注意的是,如果队列的数量为奇数,最后只能取出一个值,那么就把它和前面取出的两个数做差值,让它排在差值大的旁边。
代码:
#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){ int size; cin>>size; vector<int> q(size); int tmp; for(int i=0;i<size;i++){ cin>>tmp; q[i]=tmp; } sort(q.begin(),q.end()); int res=q[size-1]-q[0]; int min_index=1; int max_index=size-2; while(min_index<max_index){ res+=q[max_index+1]-q[min_index]; res+=q[max_index]-q[min_index-1]; min_index++; max_index--; } if(min_index==max_index){ res+=max(q[min_index]-q[min_index-1],q[min_index+1]-q[min_index]); } cout<<res<<endl;}
阅读全文
0 0
- 网易笔试题-疯狂的队列
- 2018网易校招笔试题之疯狂队列
- 《网易编程题》疯狂队列
- 网易编程题 疯狂队列
- 网易疯狂队列
- 网易疯狂队列
- 网易2017内推笔试题--小易老师的疯狂数列
- 疯狂队列-网易2018校招内推
- 2018网易校招内推-疯狂队列
- 网易的笔试题
- 网易笔试:构造队列
- 2018网易内推编程题 疯狂队列
- 网易2017内推 [编程题]疯狂队列
- 网易2018校招内推编程题_疯狂队列
- 2018网易校招编程题(7)疯狂队列
- 2018网易内推编程题 疯狂队列 C++
- 网易2018校招内推编程题集合:疯狂队列 [python]
- 【算法题】疯狂的队列
- IntelliJ IDEA CE Maven 使用方法
- 图片验证码
- 求某列最大值数据对应的那一条数据
- mygetline 实现
- Spark获取并分析Mysql数据
- 网易笔试题-疯狂的队列
- windows下安装BeautifulSoup4
- python实现简单爬虫功能
- node.js健壮性问题及打印错误日志
- StringUtils方法全集介绍
- 新手之SSH框中strut2配置
- WKWebView 的使用
- butterknife 使用步骤
- 最好大学定向爬虫