Two Sum - LeetCode

----- Условие ----- Требуется найти индексы для двух чисел из массива nums, сумма которых равна target.

----- Решение ----- Необходимо отсортировать массив и пройтись двумя указателями, сравнивая сумму и target. Решение имеет сложность по времени O(n log n), а по памяти O(n). В худшем случае быстрая сортировка может производиться по времени за сложность O(n^2), однако лучший случай O(n log n) также является и средним. При отсутствии суммы возвращал null, так как каких-либо иных требований не было.

Где-то видел версию задачи с поиском наибольшей суммы двух чисел. Там сложность по времени O(n), а по памяти O(1), так как можно сразу пройтись двумя указателями, а сортировка не требуется.

----- Код ----- /**  * @param {number[]} nums  * @param {number} target  * @return {number[]}  */ const twoSum = function(nums, target) {   if (nums.length < 2) return null;

let startInd = 0;   let endInd = nums.length - 1;

const sortedNums = […nums].sort((a, b) => a - b);

while (startInd != endInd) {     if (sortedNums[startInd] + sortedNums[endInd] === target) break;     if (sortedNums[startInd] + sortedNums[endInd] > target) {       endInd–;     } else {       startInd++;     }   }

const value1 = sortedNums[startInd];   const value2 = sortedNums[endInd];

if (value1 + value2 !== target) return null;

const [     index1,     index2   ] = [     nums.findIndex(num => num === value1),     nums.findLastIndex(num => num === value2),   ];

return [index1, index2]; };