问题详情:查找数组的任何组合是否添加到数组中找到的最大数字。
以下是我尝试实施的步骤:
从数组中提取最大数字
创建一个新的数组
可以通过使用添加的所有潜在组合
.combination
测试这些组合是否等于原始数组中的最大数字。
状态:到目前为止,我刚收到代码中最后end
的意外end
错误。 (我在网上找到了关于如何解决Ruby中子集求和问题的不同答案,但是想弄清楚如何使用我到目前为止使用的逻辑来解决它。)
任何帮助都会很棒!
def subset_sum(sums)
largest_number = subset_sum.sort.reverse[0]
array_without_largest = subset_sum.sort.reverse[1..-1]
full_combination = []
i = 0
while i <= array_without_largest.length
full_combination = full_combination + array_without_largest.combination(i).to_a.to_s
i += 1
end
j = 0
while j <= full_combination.length
return true if full_combination[j].inject { |sum, x| sum + x} == largest_number
j += 1
end
end
return false
end
puts subset_sum(1,2,3,4,10)
puts subset_sum(-1,-3,3,9,8)
答案 0 :(得分:0)
考虑一下:
def any_subset_adds_to_max?(array)
sub_array = array - [array.max]
every_combination = (1..sub_array.length).flat_map { |n| sub_array.combination(n).to_a }
every_combination.any? { |combination| combination.reduce(:+) == array.max }
end
[
[1, 2, 3, 4, 10],
[-1, -3, 3, 9, 8]
].map { |test_array| any_subset_adds_to_max? test_array } # => [true, false]
答案 1 :(得分:0)
这是我在保持原创性时可以做的最接近的代码示例。它有效,我很感激帮助!
def subset_sum(sums)
largest_number = sums.max
array_without_largest = sums - [largest_number]
full_combination = []
array_without_largest.size.times do |i|
full_combination << array_without_largest.combination(i+1).to_a
end
full_combination.flatten!(1)
full_combination.size.times do |i|
return true if full_combination[i].inject(:+) == largest_number
end
false
end