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