此代码块使用什么语言?我该如何用Ruby编写代码?

时间:2019-05-15 19:48:36

标签: ruby

下面的代码块是一个问题的解决方案,您需要找到一个数组的两个元素,这些元素加起来等于一个定义的整数(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. 而且...如何在Ruby中识别[i in range(len(lst))]?
  3. 为什么要从k中减去num作为解决方案2中的条件?

1 个答案:

答案 0 :(得分:1)

  1. Python(缩进了吗?)

  2. for i in range(x)是从0到x-1范围内的Python迭代方式。在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 = 1k - num = 44不在seen中-我们 将1添加到seen

    第2步:seen = [1]num = 3k - num = 22不在seen中-我们将3添加到{{1} }

    步骤3:seenseen = [1,3]num = 4。瞧! k - num = 1已经在1中,这意味着我们可以对最初的问题给出肯定的答案:源数组中有两个元素,因此它们的总和等于5 ...