题解 | #数的选择#

数的选择

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

全部评论

相关推荐

05-28 23:26
河南大学 Java
双非本,刚学完Redis,项目只有外卖和点评,八股没准备,算法只有lqb省一,感觉敲的项目也是一言难尽没怎么吸收。怎么你们都有实习了
大牛之途:27急个锤子,你投日常实习最好的时间就是9,10月份,那时候暑期实习都结束了,正是缺人的时候。这份日常又能给你的暑期实习增加竞争力,暑期找的好了秋招也不怕了,都是环环相扣的
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务