0

我正在做一个简单的 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吗?

4

2 回答 2

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
于 2013-09-01T10:36:14.217 回答
0

您的代码不会返回true任何数组。two_sum?([1, 2])返回false

你的逻辑有一个缺陷。true如果数组包含 a0即使它不包含两个0s,您的代码也会返回。我会这样写:

def two_sum?(arr)
  return true if arr.count(0) >= 2
  arr = arr - [0]
  arr.any?{|i| arr.any?{|j| (i + j).zero?}}
end
于 2013-09-01T10:21:01.530 回答