Есть такая задача на сайте codewars:
Create a function that returns the sum of the two lowest positive numbers given an array of minimum 4 positive integers. No floats or non-positive integers will be passed.
For example, when an array is passed like [19, 5, 42, 2, 77], the output should be 7.
Смысл здесь в том, что нам нужно создать функцию, которая выведет сумму двух самых маленьких чисел в массиве.
Так как я только новичок в кодинге, я написал следующий код:
function sumTwoSmallestNumbers(numbers) {
let arr = [numbers[0], numbers[1]];
for (let i = 2; i < numbers.length; i++) {
if (numbers[i] < arr[0] && arr[0] > arr[1]) {
arr = [numbers[i], arr[1]]
} else if (numbers[i] < arr[1]) {
arr = [arr[0], numbers[i]];
}
}
return arr[0] + arr[1];
}
Здесь я пытался создать сложность алгоритма O(n), ведь не знаешь сколько элементов может быть в массиве. Когда я решил, мне показали решения других людей. Многие проголосовали за лаконичный и куда более понятный код:
function sumTwoSmallestNumbers(numbers){
numbers = numbers.sort(function(a, b){return a - b; });
return numbers[0] + numbers[1];
};
И в целом, мне понятно, почему такой вид решения в топе... Однако, меня смутило то, что здесь используется метод sort, который перебирает массив. Представим, что у нас 10000000 элементов, разве будет такой код хорошим? Или я чего-то не понимаю в встроенном методе sort? И если последняя функция действительно долгая, то есть ли решение этой задачи самым оптимальным путем?