题解 | #数的选择#
数的选择
https://www.nowcoder.com/practice/12f72e06fc424e4d9c685cd89f2bed36
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin>>n;
vector<int> nums(n);
for(int i=0;i<n;i++) cin>>nums[i];
sort(nums.begin(),nums.end());
long long lsum=nums[0],rsum=0;
for(int i=1;i<n-i;i++){
lsum+=nums[i];
rsum+=nums[n-i];
if(rsum>lsum){
cout<<i<<endl;
return 0;
}
}
cout<<-1<<endl;
return 0;
}
// 64 位输出请用 printf("%lld")
先排序,左侧前i+1项的和lsum即为集合B元素个数为i+1时的最小和,右侧前i项的和rsum即为集合A元素个数为i时的最大和。当rsum>lsum时,输出i即可。注意,最容易出现纰漏的地方在于:所求的和会超出int型范围,应当定义为long long型。不然会出现错误!
查看10道真题和解析