数组中任意两个数的总和等于另一个数
Sum of any two numbers in array equal number from another
我有两个数组,array1
和 array2
。我想检查 array1
中是否有任何 2 个不同的数字,以便它们的总和是 array2
中的另一个不同的数字。这是我尝试过的方法,但它似乎并没有完全按照我想要的方式工作。
array1.each do |k|
array1.each do |l|
array2.each do |m|
if k + l == m
# do something with k, l, m
end
end
end
end
您可能会选择同一个号码两次。又名
array1 = [1]
array2 = [2]
您将获得2 == 1 + 1
。为避免这种情况,您可以使用 Array#combination
:
array1.combination(2).select { |x, y| array2.include? x + y }.each do |x, y|
# do something with x, y and x + y
end
因为我们只想知道 m+n
是否是第二个数组的元素,其中 m
和 n
是 distinct 元素对于第一个数组(我假设是 m != n
),我们将要使用 Emumerable#any?。
require 'set'
def any_pair?(arr1, arr2)
set = arr2.to_set
arr1.uniq.combination(2).any? { |n,m| set.include?(n+m) }
end
any_pair? [3,1,6,1,4], [1,2,6,7]
#=> true
any_pair? [3,1,6,1,4], [1,2,6]
#=> false
我们需要检查 arr1
中两个值的和是否是 arr2
的成员最多 n*(n-1)
次,其中 n
是 arr1.size
.我们可以使用 Array#include?,但通过将 arr2
转换为集合作为初始步骤,可以使此操作更加高效。集合成员查找(作为散列查找实现)非常快。
如果我们希望 return arr1
的所有不同元素对,其总和是 arr2
的成员,则方法将更改为以下内容。
def all_pairs(arr1, arr2)
set = arr2.to_set
arr1.uniq.combination(2).select { |n,m| set.include?(n+m) }
end
all_pairs [3,1,6,1,4], [1,2,6,7]
#=> [[3, 4], [1, 6]]
all_pairs [3,1,6,1,4], [1,2,6]
#=> []
我有两个数组,array1
和 array2
。我想检查 array1
中是否有任何 2 个不同的数字,以便它们的总和是 array2
中的另一个不同的数字。这是我尝试过的方法,但它似乎并没有完全按照我想要的方式工作。
array1.each do |k|
array1.each do |l|
array2.each do |m|
if k + l == m
# do something with k, l, m
end
end
end
end
您可能会选择同一个号码两次。又名
array1 = [1]
array2 = [2]
您将获得2 == 1 + 1
。为避免这种情况,您可以使用 Array#combination
:
array1.combination(2).select { |x, y| array2.include? x + y }.each do |x, y|
# do something with x, y and x + y
end
因为我们只想知道 m+n
是否是第二个数组的元素,其中 m
和 n
是 distinct 元素对于第一个数组(我假设是 m != n
),我们将要使用 Emumerable#any?。
require 'set'
def any_pair?(arr1, arr2)
set = arr2.to_set
arr1.uniq.combination(2).any? { |n,m| set.include?(n+m) }
end
any_pair? [3,1,6,1,4], [1,2,6,7]
#=> true
any_pair? [3,1,6,1,4], [1,2,6]
#=> false
我们需要检查 arr1
中两个值的和是否是 arr2
的成员最多 n*(n-1)
次,其中 n
是 arr1.size
.我们可以使用 Array#include?,但通过将 arr2
转换为集合作为初始步骤,可以使此操作更加高效。集合成员查找(作为散列查找实现)非常快。
如果我们希望 return arr1
的所有不同元素对,其总和是 arr2
的成员,则方法将更改为以下内容。
def all_pairs(arr1, arr2)
set = arr2.to_set
arr1.uniq.combination(2).select { |n,m| set.include?(n+m) }
end
all_pairs [3,1,6,1,4], [1,2,6,7]
#=> [[3, 4], [1, 6]]
all_pairs [3,1,6,1,4], [1,2,6]
#=> []