首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解两个和leetcode问题(Ruby)

理解两个和leetcode问题(Ruby)
EN

Stack Overflow用户
提问于 2020-01-15 07:42:36
回答 1查看 212关注 0票数 3

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

代码语言:javascript
复制
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

但是,我不太确定为什么会这样。

因此,我理解,在每一条语句中,它都要经过这些数字,才能找到区别。例如,

代码语言:javascript
复制
nums = [4,2,5,1]
target = 6

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

代码语言:javascript
复制
hash = {
  4: 0
}

在第二个循环中,差异为6-4 = 2。hash4为零,因此它将把当前的num和索引添加到字典中。

代码语言:javascript
复制
hash = {
  4: 0
  2: 1
}

就像这样,这是否会继续向散列中添加num,因为至少在这种情况下不存在匹配的键值对。

也许我把事情搞得太复杂了。如果有人可以eli5,我会非常感激的。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-15 07:53:54

诀窍是,我们使用数字作为键将值添加到哈希:

代码语言:javascript
复制
hash[num] = index

但是,使用diff作为关键提取它:

代码语言:javascript
复制
if hash[diff]

因此,如果您有以下输入:

代码语言:javascript
复制
nums = [4,2,5,1]
target = 6

然后在第一步,差异是6-4= 2,映射中没有键2 (diff),我们将键4(数字)添加到映射中。在第二步,差异是6-2= 4,并且映射中已经有一个键4 (diff),所以我们返回值。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59746944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档