На каком языке этот блок кода?И как бы я написал это в Ruby? - PullRequest
0 голосов
/ 15 мая 2019

Блок кода ниже является решением проблемы, где вам нужно найти два элемента массива, которые складываются в определенное целое число (k)

# Solution 1:
def two_sum(lst, k):
for i in range(len(lst)):
    for j in range(len(lst)):
        if i != j and lst[i] + lst[j] == k:
            return True
return False

# Solution 2:
def two_sum(lst, k):
seen = set()
for num in lst:
    if k - num in seen:
        return True
    seen.add(num)
return False
  1. Во-первых, на каком языке выше?
  2. И ... как мне определить [i in range (len (lst))]] в Ruby?
  3. Почему вы вычитаете num из k как условие в решении 2?

1 Ответ

1 голос
/ 15 мая 2019
  1. Python (со сломанными отступами?)

  2. for i in range(x) - это способ итерации Python в диапазоне от 0 до x-1. В Ruby то же самое можно выразить несколькими различными способами, например, очень похожим образом, используя цикл for for i in 0...x, используя итератор для диапазона как (0...x).each { |i| ... } или даже x.times { |i| ... }.

  3. seen содержит числа из списка (массива), которые уже проверены. Если k - num равно любому числу в seen (назовем его j), то это означает j + num == k - q.e.d. Например, давайте представим, что у нас есть lst = [1,3,4,7,11] и k = 5. В этом случае алгоритм будет работать следующим образом:

    шаг 1: seen = [], num = 1, k - num = 4, 4 не в seen - мы добавьте 1 к seen

    шаг 2: seen = [1], num = 3, k - num = 2, 2 не в seen - мы добавляем 3 к seen

    шаг 3: seen = [1,3], num = 4, k - num = 1. Вуаля! 1 уже в seen, и это означает, что мы можем дать положительный ответ на первоначальный вопрос: в исходном массиве есть два элемента, так что их сумма равна 5 ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...