面试碰到的一道题目做下分享,如有错误,请指正
// 找出数组中第k大和第m大的数字相加之和
// 如 k = 2;m = 4; 找出第2和第4大之和 2 + 4 + 4 输出结果为 10
const arr = [1, 2, 4, 4, 3, 5];
const k = 2;
const m = 4;
const fn = (arr, k, m) => {
let newArr = [];
// 数组去重
newArr = Array.from(new Set(arr));
// 排序用于找出k和n对应的数字
newArr = newArr.sort((a, b) => a - b);
// 存储第k大的数字
let KNum = newArr[newArr.length - k];
// 存储第n大的数字
let mNum = newArr[newArr.length - m];
// 找出第k大和第n大的数,记录起来
let nums = arr.filter((item) => KNum === item || mNum === item);
let sum = [];
// 求和
sum = nums.reduce((cur, pre) => {
return cur + pre;
}, 0)
return sum;
}
console.log(fn(arr, k, m))