版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:[https://blog.csdn.net/weixin\_42449444/article/details/86188179](https://blog.csdn.net/weixin_42449444/article/details/86188179)
给定一个未排序的数列,找到此数列在已排序状态下的两个相邻值的最大差值,少于两个值时返回0。例如:给定数列 1,3,2,0,1,6,8 则 最大差值为3。注意:请尽量使用时间复杂度为O(n)的方案。
第一行输入单个整数N作为数列的大小,第二行输入所有数列中的元素M,共N个。0 < N <= 1000000, 0 < M < 2100000000
数列的最大差值。
3
1 10 5
5
牛客上看到的这道18年校招真题可以说和16年9月的CCF最大波动一模一样。先对数列进行升序排列,然后再用ans记录相邻俩个数的最大差值即可。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int N;
cin >> N;
int a[N];
for (int i = 0; i < N; i++)
{
cin >> a[i];
}
sort(a,a+N);
int ans = 0; //ans记录最大差值
for (int i = 0; i < N-1; i++)
{
ans = max(ans,abs(a[i+1]-a[i]));
}
cout << ans << endl;
return 0;
}