用于检查数组是否包含总和为0的对的布尔值

时间:2013-09-01 10:04:57

标签: ruby arrays

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

2 个答案:

答案 0 :(得分:0)

您的代码不会为任何数组返回truetwo_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