最大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; }