Я работаю над проблемой Leetcode Two Sums : «Если задан массив целых чисел, вернуть индексы двух чисел так, чтобы они складывались в заданную цель c.». Вот что у меня есть:
def two_sum(nums, target)
hash = {}
nums.each_with_index do |num, index|
diff = target - num
if hash[diff]
return [hash[diff],index]
else
hash[num] = index
end
end
end
Код работает, однако я не слишком уверен, почему это работает.
Итак, я понимаю, что в каждом утверждении он просматривает числа и находит разницу. Например,
nums = [4,2,5,1]
target = 6
На первом l oop разница составляет 6-2 = 4. Но ha sh, очевидно, пуст, поэтому он будет регистрировать num как ключ, с текущим Индекс в качестве значения. Таким образом, ha sh is,
hash = {
4: 0
}
На втором l oop разница составляет 6-4 = 2. hash [4] равен нулю, поэтому он добавит текущий номер и индекс к словарь.
hash = {
4: 0
2: 1
}
Точно так, разве это не добавит числа к ха sh, потому что, по крайней мере, в этом случае нет соответствующих пар ключ-значение?
Может быть, я Я усложняю вещи. Если бы кто-то мог eli5, я был бы очень признателен. Спасибо!