题解 | #数的选择#

数的选择

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型。不然会出现错误!

全部评论

相关推荐

高斯林的信徒:武大简历挂?我勒个骚岗
点赞 评论 收藏
分享
牛大宝儿236:还没入职就PUA,[发火我之前遇到一个月给500块钱的
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务