topK问题 - 求和

18 阅读1分钟

给定一个数组,编写一个函数来计算它的最大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

小根堆

--- 待补充