【发布时间】:2021-11-19 13:21:35
【问题描述】:
问题: 给你一个数组 A,有 n 个元素。你必须从数组中删除 n/2 个元素并将其添加到另一个数组 B (最初为空)。找到差异的最大值和最小值 这两个数组之间。这两个数组之间的区别是 总和(绝对值(A[i]-B[i])。
该代码仅在数组 (N) 的大小为偶数时才有效。 有人可以提供一个解决方案,当数组的大小也是奇数时也可以工作。
#include <bits/stdc++.h>
using namespace std;
//This code only works for even number of elements
int main(){
int n;
cin>>n;
vector<int> a(n);
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a.begin(), a.end());
long long mn = 0,mx = 0;
for(int i=0;i<n/2;i++){
mx+=a[i+n/2]-a[i];
mn+=a[2*i+1]-a[2*i];
}
cout<<abs(mn)<<" "<<abs(mx)<<" ";
return 0;
}
【问题讨论】:
-
问题陈述清楚地暗示
n是偶数,对于奇数n没有意义。当n为奇数时,没有办法“完全删除n/2元素”,因为显然无法删除半个元素。