我正在做一个简单的ruby挑战,它要求我创建一个方法two_sum?(arr),如果数组包含一个加起来为0的对,则返回true。这可以是0和0,或-2和+ 2等。这个挑战并不指望我知道.permutation,所以我试着这样做 -
def two_sum?(arr)
arr.each do | obj |
arr.each do | pair_obj |
return true if obj + pair_obj == 0
end
end
false
end
当我使用示例数组运行时,我对于我弹出的任何数组都是正确的。
我做错了什么帮助?不允许两次做arr.each吗?
答案 0 :(得分:0)
您的代码不会为任何数组返回true
。 two_sum?([1, 2])
会返回false
。
你的逻辑中有一个缺陷。如果数组包含true
,即使代码不包含两个0
,您的代码也会返回0
。我会这样写:
def two_sum?(arr)
return true if arr.count(0) >= 2
arr = arr - [0]
arr.any?{|i| arr.any?{|j| (i + j).zero?}}
end
答案 1 :(得分:0)
出于好奇:
def two_sum? a
a.count(0) > 1 || (a & a.map(&:-@)).size > 1
end
two_sum? [1,2,3,4,-2]
# ⇒ true
two_sum? [1,0,3,4,0]
# ⇒ true
two_sum? [1,2,3,4,0]
# ⇒ false
two_sum? [1,2,3,4,5]
# ⇒ false
two_sum? [1,2,3,-2,0]
# ⇒ true