有一个整形数组A,请设计一个复杂度为O(n)的算法,算出排序后相邻两数的最大差值。
给定一个int数组A和A的大小n,请返回最大的差值。保证数组元素多于1个。
class Gap {
public:
int maxGap(vector<int> A, int n) {
// write code here
int tmax,tmin;
int maxgap=0;
tmax=tmin=A[0];
for(int i=0;i<n;i++)
{
if(A[i]<tmin)
tmin=A[i];
if(A[i]>tmax)
tmax=A[i];
}
int len=tmax-tmin;
double jiange=len*1.0/n;
vector<int> bucketmin(n+1,INT_MAX);
vector<int> bucketmax(n+1,INT_MIN);
for(int i=0;i<n;i++)
{
int index=(A[i]-tmin)/jiange;
bucketmin[index]=min(A[i],bucketmin[index]);
bucketmax[index]=max(A[i],bucketmax[index]);
}
int pre=bucketmax[0];
for(int i=1;i<n+1;i++)
{
if(bucketmin[i]!=INT_MAX)
{
int temp=bucketmin[i]-pre;
if(temp>maxgap)
{
maxgap=temp;
}
pre=bucketmax[i];
}
}
return maxgap;
}
};