Всем привет.
Задача:
Необходимо найти n самых частых вхождений в массиве.
Решение:
const array = [9, 9, 9, 9, 8, 8, 4, 4, 4, 1, 2];
const getN = (array, n) => {
const obj = array.reduce((acc, c) => {
acc[c] ? acc[c] += 1 : acc[c] = 1;
return acc
}, {})
return Object.keys(obj).sort((a, b) => {
return obj[b] - obj[a];
}).slice(0, n).map((el) => parseInt(el));
}
console.log(getN(array, 2)); // [9, 4]
Подскажите, как оптимизировать алгоритм до O (n), и не использовать. sort() O (n log2n)?