大家好这里是清隆学长 ,一枚热爱算法的程序员
✨ 本系列打算持续跟新 华为OD机试-D卷 的三语言AC题解
感谢大家的订阅➕ 和 喜欢
=> 最大 N 个数与最小 N 个数的和(100分) <=
评测功能需要 =>订阅专栏<= 后联系清隆解锁~
给定一个数组,编写一个函数来计算它的最大 个数与最小 个数的和。你需要对数组进行去重。
说明:
第一行输入 , 表示数组大小。
第二行输入 个数,表示数组内容。
第三行输入 , 表示需要计算的最大、最小 个数。
输出最大 个数与最小 个数的和。
输入
5
95 88 83 64 100
2
输出
342
输入
5
3 2 3 4 2
2
输出
-1
数组中数字范围 [0, 1000]。
题目要求计算数组中最大 个数与最小 个数的和,并且这两个部分不能有重叠。首先需要对数组进行去重,然后检查去重后的数组长度是否满足 2 * 的要求。如果满足,则计算最大 个数与最小 个数的和;否则返回 -1。
def max_min_sum(arr, n):
arr = list(set(arr))
arr.sort()
if 2 * n > len(arr):
return -1
return sum(arr[:n]) + sum(arr[-n:])
if __name__ == "__main__":
m = int(input())
arr = list(map(int, input().split()))
n = int(input())
print(max_min_sum(arr, n))
import java.util.Arrays;
import java.util.Scanner;
import java.util.Set;
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int[] arr = new int[m];
for (int i = 0; i < m; i++) {
arr[i] = sc.nextInt();
}
int n = sc.nextInt();
System.out.println(maxMinSum(arr, n));
}
public static int maxMinSum(int[] arr, int n) {
Set<Integer> set = new HashSet<>();
for (int num : arr) {
set.add(num);
}
Integer[] uniqueArr = set.toArray(new Integer[0]);
Arrays.sort(uniqueArr);
if (2 * n > uniqueArr.length) {
return -1;
}
int sum = 0;
for (int i = 0; i < n; i++) {
sum += uniqueArr[i];
}
for (int i = uniqueArr.length - n; i < uniqueArr.length; i++) {
sum += uniqueArr[i];
}
return sum;
}
}
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
int maxMinSum(vector<int>& arr, int n) {
set<int> uniqueSet(arr.begin(), arr.end());
vector<int> uniqueArr(uniqueSet.begin(), uniqueSet.end());
if (2 * n > uniqueArr.size()) {
return -1;
}
sort(uniqueArr.begin(), uniqueArr.end());
int sum = 0;
for (int i = 0; i < n; ++i) {
sum += uniqueArr[i];
}
for (int i = uniqueArr.size() - n; i < uniqueArr.size(); ++i) {
sum += uniqueArr[i];
}
return sum;
}
int main() {
int m;
cin >> m;
vector<int> arr(m);
for (int i = 0; i < m; ++i) {
cin >> arr[i];
}
int n;
cin >> n;
cout << maxMinSum(arr, n) << endl;
return 0;
}
#华为OD##华为##春招##秋招##笔试#