了解两个总的leetcode问题(Ruby)

时间:2020-01-15 07:42:36

标签: ruby

我正在研究Leetcode Two Sums问题:“给出一个整数数组,返回两个数字的索引,以便它们加起来成为一个特定的目标。”这就是我所拥有的:

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

在第一个循环中,差值为6-2 =4。但是哈希显然为空,因此它将以当前索引为值将num注册为键。因此,哈希是

hash = {
  4: 0
}

在第二个循环中,差为6-4 =2。hash [4]为nil,因此它将当前num和index添加到字典中。

hash = {
  4: 0
  2: 1
}

像这样,难道这不会继续将nums添加到哈希中,因为至少在这种情况下,没有匹配的键值对吗?

也许我使事情复杂化了。如果有人能做到,我将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:6)

诀窍是我们使用 number 作为键将值添加到哈希中:

hash[num] = index

但使用 diff 作为键将其提取:

if hash[diff]

因此,如果您有输入内容:

nums = [4,2,5,1]
target = 6

然后在第一步中,差异为6-4 = 2,地图中没有键2(差异),然后将键4(数字)添加到地图中。 第二步,差异为6-2 = 4,并且地图中已经有一个键4(diff),因此我们返回该值。