给定一个数组,求如果排完序后,相邻两数的最大差值。要求时间复杂度O(N),且要求不能用基于比较的排序(***如果用比较的排序,需要O(nlogn)的时间复杂度***)
int findTheMaxDifferece(vector<int> vec){
int len=vec.size();//准备len+1个容器
int maxi=vec[0],mini=vec[0];
for(int i=0;i<len;i++){
maxi=max(vec[i],maxi);
mini=min(vec[i],mini);
}
int num[len+1][2];
for(int i=0;i<len+1;i++){
num[i][1]=-999;
num[i][0]=999;
}
//每一个桶中的区间差
int gap=(maxi-mini)/(len+1)+1;
for(int i=0;i<len;i++){
int index=vec[i]/gap;
if(vec[i]<num[index][0]){
num[index][0]=vec[i];
}
if(vec[i]>num[index][1]){
num[index][1]=vec[i];
}
}
int k=0;
maxi=0;
for(int i=0;i<len+1;i++){
if(num[i][1]!=-999){
maxi=max(maxi,num[i][1]-num[i][0]);
if(num[i][0]!=999){
maxi=max(num[i][0]-k,maxi);
}
k=num[i][1];
}
}
return maxi;
}
int main(){
vector<int>vec={9,0,17,4,63,72,65,67,99};
cout<<findTheMaxDifferece(vec)<<endl;
return 0;
}