我正在研究Leetcode两和问题:“给定一个整数数组,返回两个数字的索引,使它们加起来是一个特定的目标。”这就是我所拥有的:
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。hash4为零,因此它将把当前的num和索引添加到字典中。
hash = {
4: 0
2: 1
}就像这样,这是否会继续向散列中添加num,因为至少在这种情况下不存在匹配的键值对。
也许我把事情搞得太复杂了。如果有人可以eli5,我会非常感激的。谢谢!
发布于 2020-01-15 07:53:54
诀窍是,我们使用数字作为键将值添加到哈希:
hash[num] = index但是,使用diff作为关键提取它:
if hash[diff]因此,如果您有以下输入:
nums = [4,2,5,1]
target = 6然后在第一步,差异是6-4= 2,映射中没有键2 (diff),我们将键4(数字)添加到映射中。在第二步,差异是6-2= 4,并且映射中已经有一个键4 (diff),所以我们返回值。
https://stackoverflow.com/questions/59746944
复制相似问题