最大N个数与最小N个数的和

标题:最大N个数与最小N个数的和 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。
说明:
       *数组中数字范围[0, 1000]
       *最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回-1
*输入非法返回-1


while True:
    try:
        m = int(input())
        nums_list = sorted(list(set(map(int, input().split()))))
        n = int(input())
        if len(nums_list) < 2 * n or nums_list[0] < 0 or nums_list[-1] > 1000:
            print(-1)
        else:
            min_nums, max_nums = nums_list[:n], nums_list[-n:]
            result = sum(min_nums) + sum(max_nums) if not set(min_nums) & set(max_nums) else -1
            print(result)
    except:
        break
	
#include <bits/stdc++.h>

using namespace std;

int Sum(vector<int>& nums, int n)
{
    set<int> numSet;
    for(int i=0;i<nums.size();i++)
    {
        numSet.insert(nums[i]);
    }
    if(numSet.size()<n*2)
        return -1;
    int ans = 0;
    auto start = numSet.begin(), end = numSet.end();
    end--;
    while(n>0)
    {
        ans += *start + *end;
        start++;
        end--;
        n--;
    }
    return ans;
}

int main(){
    vector<int> nums;
    int m = 0, n = 0, num = 0;
    cin >> m;
    for(int i = 0; i < m; i++){
        cin>>num;
        nums.push_back(num);
    }
    cin >> n;
    
    cout<<Sum(nums,n)<<endl;
    
    return 0;
}



全部评论

相关推荐

昨天 10:41
已编辑
门头沟学院 C++
面试官说,他面到现在只有一个人拿了纸质简历,悲惨的是我也没拿
找到工作就狠狠玩CSGO:没要求带简历,但确实最好带,我带了之后面试官直接对着纸质简历问的,最后我还特意把简历留下来了,希望能加深一下印象
点赞 评论 收藏
分享
08-01 18:48
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务