更新时间:2023-02-10 21:20:10
您可以在O(nlogn)中进行操作.请仔细考虑...
You can do so in O(nlogn).Think before...
选择left = 5 right = 5,这是最大值.我是1,而j是4,因此我给出了最大绝对差,所以
Select left=5 right=5 that is the maximum. i is 1 and j is 4 and i gives max absolute difference so
根据最大绝对差在其右侧或左侧添加.在此处以i表示右侧
Append on its right or left based upon max absolute difference.Here its on right with i
现在left = 1和right = 2和4与左差最大
Now left=1 and right=2 and 4 gives max difference with left so
最后,左和右的差异为3
Finally its same difference for left and right with 3
代码:-( C ++)
CODE:-(C++)
sort(a.begin(),a.end());
int l=a[a.size()-1]; //left
int r=l; // right
int i=0,j=a.size()-2;
long long int sum=0;
while(i<j){
int li=abs(l-a[i]),ri=abs(r-a[i]);
int lj=abs(l-a[j]),rj=abs(r-a[j]);
if(li>ri||lj>rj){ //left side
if(li>lj){
sum+=li;
l=a[i++];
}else{
sum+=lj;
l=a[j--];
}
}else{
if(ri>rj){
sum+=ri;
r=a[i++];
}else{
sum+=rj;
r=a[j--];
}
}
//cout<<l<<"---"<<r<<"------"<<i<<"---"<<j<<"----------"<<sum<<endl;
}
sum+=MAX(abs(l-a[i]),abs(r-a[i]));
cout<<sum<<endl;