Answer

Answer

t.me/js_test

Ответ:

function twoSum(arr, k) {
    let l = 0,
        r = arr.length - 1;
    while (l < r) {
        const sum = arr[l] + arr[r];
        if (sum === k) {
            return [arr[l], arr[r]];
        }
        if (sum < k) {
            l++;
        } else {
            r--;
        }
    }
    return [];
}

Объяснение:

Данную задачу можно решить разными способами, здесь описан сам оптимальный (сложность алгоритма по времени равна O(n) а по памяти O(1)). Сначала заводим два указателя на первый элемент и на последний. Затем в цикле while считаем сумму элементов на которые указывают указатели, если сумма равна числу которое нужно найти k то возвращаем эти элементы, если сумма меньше k значит нужно эту сумму увеличить, для этого двигаем левый указатель вправо на 1, ну а если сумма больше k то сумму нужно уменьшить, для этого двигаем правый указатель влево на 1.

Код для проверки:

function twoSum(arr, k) {
    let l = 0,
        r = arr.length - 1;
    while (l < r) {
        const sum = arr[l] + arr[r];
        if (sum === k) {
            return [arr[l], arr[r]];
        }
        if (sum < k) {
            l++;
        } else {
            r--;
        }
    }
    return [];
}

console.log(twoSum([-1, 2, 5, 6], 7));
console.log(twoSum([-3, -1, 0, 2, 6], 6));
console.log(twoSum([2, 4, 5], 8));
console.log(twoSum([-9, -5, -2, -1, 1, 4, 9, 11], 3));

Report Page