给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。
说明:
*数组中数字范围[0, 1000]
*最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回-1
*输入非法返回-1
思路1:去重,排序
let getSum = (array, number) => {
let newArray = [...(new Set(array))];
if (newArray.length < number * 2) {
return -1;
}
newArray.sort((a,b) =>(a-b));
let maxArray = newArray.slice(newArray.length - number);
let minArray = newArray.slice(0, number)
return maxArray.concat(minArray).reduce((sum, item) => {
sum = sum + item;
return sum;
}, 0)
}
console.log(getSum([3,1,7,66,66,66,3,2,3,4,56,7,0, -2], 2)); // 120
console.log(getSum([3,1,7,66,66,66,3,2,3,4,56,7,0, -2, -2, -10], 9)); // -1
console.log(getSum([3,1,7,66,66,66,3,2,3,4,56,7,0, -2, -2, -10], 3)); // 117
小根堆
--- 待补充