получили этот вопрос в последнее время:Big O из получить наибольшее количество
Написать функцию, которая принимает массив массивов (каждый из которых содержит число отсортированного от большего к меньшему) и числу (п). Верните n наибольших чисел.
Например:
findLargest ([[10, 5, 3, 1], [9, 8, 7, 6], [11, 2, 1, 0]], 5) => [11, 10, 9, 8, 7]
findLargest ([[15, 5, 3, 1], [10, 8, 7, 6]], 3) => [15, 10, 8 ]
Сделайте это без копирования или изменения массивов (только что прочитанных из них). Оптимизация для временной сложности.
Я придумал это, но я не так доволен моим решением:
function findLargest(numberArrays, n) {
var results = [];
var pointers = [];
for (var x = 0; x < numberArrays.length; x++) {
pointers.push(0);
}
while (results.length < n) {
var subMaxes = [];
for (var i = 0; i < pointers.length; i++) {
var point = pointers[i];
subMaxes.push(numberArrays[i][point]);
}
var max = Math.max.apply(null, subMaxes);
var indexOfMax = subMaxes.indexOf(max);
pointers[indexOfMax]++;
results.push(max);
}
return results;
}
Я думаю, что это O (N^2) .... есть в любом случае сделать это в O (п)?
Это зависит от того, чувствуете ли вы, что «n» - это количество массивов или количество полных элементов во всех массивах. _Выбрав, что сами отдельные массивы уже отсортированы_, вы, вероятно, можете сделать _better_, чем «n», по количеству элементов, но может потребоваться n log n в терминах количества массивов. –
Это зависит от количества элементов в массивах. – djechlin
Сложность - это количество массивов, умноженное на количество элементов в самом длинном массиве. – Oleander