Это одна из наиболее часто задаваемых проблем на собеседованиях. Мы можем сделать это различными способами, например, проверив пары по каждому значению, используя два цикла, но мы должны выбрать оптимальное решение.

Вот проблема

Подход-

Для оптимального решения мы будем использовать карту или просто объект для хранения всех значений, по которым мы будем проходить цикл, и идея состоит в том, чтобы проверить, присутствует ли номер противника (целевой-текущий номер) в нашем объекте; если да, то у нас есть нужная пара.

Решение —

var twoSum = function(nums, target) {
   
    let freq={}
    for(let i=0;i<nums.length;i++){
        let opp=target-nums[i]
        if(freq[opp]!== undefined){
            return [i,freq[opp]]
        }
        freq[nums[i]]=i
    }
};

Пояснение-

например 1:

когда i = 0 => nums[i] = 2. Проверяем opp (9–2 = 7) присутствует ли 7 в частоте или нет по этому условию; если это не так, то мы сохраняем текущее число в объекте и его индекс в качестве значения.

Мы использовали undefined вместо 0, потому что 0 тоже ложно.

тогда при i = 1 и nums[i] = 7 в объекте присутствует его оппонент 9–7 = 2, поэтому мы возвращаем значение индекса оппонента, который мы сохранили в объекте, и текущий индекс в массиве по требованию .

Надеюсь, это поможет, если вы застряли.👍👍👍

Попробуйте это самостоятельно один раз после прохождения решения.