У меня есть array
и sum_of_two
:найти первую комбинацию из двух целых чисел в массиве, чей последний элемент появляется ранними и сумма соответствует заданному значению
array = [10, 5, 1, 9, 7, 8, 2, 4, 6, 9, 3, 2, 1, 4, 8, 7, 5]
sum_of_two = 10
Я пытаюсь найти комбинацию из двух целых чисел array
, чей последний элемент из этих двух наиболее ранних среди таких комбинаций, сумма которых равна sum_of_two
. Например, как [5, 5]
и [1, 9]
являются кандидатами для таких комбинаций, но 9
из [1, 9]
(который появляется позже, чем в 1
array
) появляется раньше, чем второй 5
из [5, 5]
(который является последним элементом в array
). Поэтому я хотел бы вернуть [1, 9]
.
Я попытался с помощью combination
и find
:
array.combination(2).find{|x,y| x + y == sum_of_two} #=> [5, 5]
Тем не менее, он возвращает комбинацию первого целого числа в массиве, 5
, и другое целое число далее вдоль массива, также 5
.
Если я использую find_all
вместо find
, я получаю все комбинации двух целых чисел, которые складываются в sum_of_two
:
array.combination(2).find_all{|x,y| x + y == sum_of_two}
#=> [[5, 5], [1, 9], [1, 9], [9, 1], [7, 3], [8, 2], [8, 2], [2, 8], [4, 6], [6, 4], [9, 1], [3, 7], [2, 8]]
Но тогда я не знаю, как получить первый.
В каком смысле '[1, 9]' первая комбинация, в отличие от '[5, 5]'? – sawa
Это первая комбинация слева. Как и в случае, если вы должны прочитать массив слева направо. Есть ли лучший способ объяснить это? Я попытался написать «порядок появления» (слева), поскольку я думал, что это лучший способ объяснить это. –
Идти слева направо, не ударяйте '5' сначала перед' 1' или '9'? – sawa