[编程题]最大差值
- 热度指数:172时间限制:1秒空间限制:32768K
给定一个未排序的数列,找到此数列在已排序状态下的两个相邻值的最大差值,少于两个值时返回0。例如:给定数列 [1,3,2,0,1,6,8] 则 最大差值为3。注意:请尽量使用时间复杂度为O(n)的方案。
输入描述:
第一行输入单个整数N作为数列的大小,第二行输入所有数列中的元素M,共N个。0 < N <= 1000000, 0 < M < 2100000000
输出描述:
数列的最大差值
示例1
输入
3 1 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);
}
}
本文介绍了一个编程挑战,即寻找未排序数列在排序状态下相邻值的最大差值,并提供了一种解决方案,该方案考虑了时间复杂度的要求。

被折叠的 条评论
为什么被折叠?



