最大差值(2017某计算机校招笔试试题)

来源:互联网 发布:非诚勿扰杨宇航淘宝店 编辑:程序博客网 时间:2024/06/06 12:50


[编程题]最大差值
  • 热度指数:172时间限制:1秒空间限制:32768K
给定一个未排序的数列,找到此数列在已排序状态下的两个相邻值的最大差值,少于两个值时返回0。例如:给定数列 [1,3,2,0,1,6,8] 则 最大差值为3。注意:请尽量使用时间复杂度为O(n)的方案。
输入描述:
第一行输入单个整数N作为数列的大小,第二行输入所有数列中的元素M,共N个。0 < N <= 1000000, 0 < M < 2100000000


输出描述:
数列的最大差值
示例1

输入

31 10 5

输出

5

一般想法,排序,然后后减前,找最大值,代码不够完善,因为时间复杂度影响排序算法的执行,所以自己就用了库函数的sort排序,具体什么算法我也不太清楚,利用了

list容器中sort,最大值利用了逆序排序sort(greater);最后满足了时间和空间要求不容易啊大哭

 运行时间: 104 ms 占用内存:6644K


#include<iostream>
#include<list>
using namespace std;
 
int main()
{
 int n;
 cin>>n;
 list <int> L1;
 list <int> L2;
 int m;
 for(int i=0;i<n;i++)
 {
     cin>>m;
     L1.push_back(m);
 }
 if(n<2)
     cout<<0;
 else{
 L1.sort();
 list <int>::iterator it1;
 it1=L1.begin();
 it1++;
 list <int>::iterator it2;
 it2=L1.begin();
 for(it1;it1!=L1.end();it1++)
 {m=*it1-*it2;
  it2++;
  L2.push_back(m);
 }
 L2.sort(greater<int>());
 it2=L2.begin();
 cout<<(*it2);
 }
原创粉丝点击