题目
给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。
说明:
*数组中数字范围[0, 1000]
*最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回-1
思路
数组,排序
题解
import java.util.*;
public class Solution {
public int calculateSum(int[] nums, int N) {
// 创建一个HashSet用于去重
Set<Integer> set = new HashSet<>();
for (int num : nums) {
set.add(num);
}
// 如果数组中的不重复元素少于2N个,那么输入非法,返回-1
if (set.size() < 2 * N) {
return -1;
}
// 将HashSet转换为数组
Integer[] uniqueNums = set.toArray(new Integer[0]);
// 对数组进行排序
Arrays.sort(uniqueNums);
// 计算最大的N个数和最小的N个数的和
int sum = 0;
for (int i = 0; i < N; i++) {
sum += uniqueNums[i]; // 最小的N个数
sum += uniqueNums[uniqueNums.length - 1 - i]; // 最大的N个数
}
return sum;
}
}