在Ruby中使用2和算法。
我已经启动了哈希t,然后在每个迭代器中尝试检查t中是否存在键。 由于某些原因,即使我在else部分中添加了if语句,似乎也永远不会将t [target-n]评估为真。
def two_sum(nums, target)
t={}
a=[]
nums.each do |n|
if t[target-n]
a << nums.index(n)
a << nums.index(t[target-n])
return a
else
t[target-n] = n
end
end
end
答案 0 :(得分:3)
如果在循环开始时打印此调试行p "#{target-n}, #{t}"
,则可以找到原因。
...
nums.each do |n|
p "#{target-n}, #{t}"
...
使用此呼叫two_sum([3, 5, 2, -4, 8, 11], 7)
,您会得到打印:
# "4, {}"
# "2, {4=>3}"
# "5, {4=>3, 2=>5}"
# "11, {4=>3, 2=>5, 5=>2}"
# "-1, {4=>3, 2=>5, 5=>2, 11=>-4}"
# "-4, {4=>3, 2=>5, 5=>2, 11=>-4, -1=>8}"
如您所见,您要查找的密钥由代码的else
部分添加。
一个可能的选择(强力)是建立对的散列,跳过重复的对。然后,如果nums
中的每个配对都遍历散列数组a的哈希。
最后调用a
,由方法返回。
def two_sum(nums, target)
t={}
a=[]
nums.each do |n|
t[target-n] = n unless t[n]
end
t.each { |k,v| a << [k,v] if nums.include? k }
a
end