Jus*_*ice 0 ruby arrays product cycle
我想将每个项目放在一个数组中,将它们彼此相乘,然后找到倍数的最大值。
我尝试了很多事情,直到找到了该cycle
方法,然后才知道并陷入困境:
def adjacentElementsProduct(inputArray)
outArray = inputArray.cycle(inputArray.length){|num| num[0] * num[1]}.to_a
return outArray.max
end
Run Code Online (Sandbox Code Playgroud)
这是行不通的,因为Ruby显然没有(陈述的)能力来知道什么num[0]
或是什么num[1]
。
例如:
adjacentElementsProduct([3, 6, -2, -5, 7, 3]) => 21
Run Code Online (Sandbox Code Playgroud)
因为3*7
当所有数字相乘时是最大的乘积。
您可以找到两个最大的值。无需尝试每种组合:
[3, 6, -2, -5, 7, 3].max(2).inject(:*)
#=> 42
Run Code Online (Sandbox Code Playgroud)
如果您仍然想结合使用,请使用以下combination
方法:
[3, 6, -2, -5, 7, 3].combination(2)
.map { |f, s| f * s }
.max
#=> 42
Run Code Online (Sandbox Code Playgroud)
如果要查找最大的其他值,请使用each_cons
:
[3, 6, -2, -5, 7, 3].each_cons(2)
.map {|f, s| f * s }
.max
#=> 21
Run Code Online (Sandbox Code Playgroud)
也,
max_by {|f, s| f * s }.inject(:*)
Run Code Online (Sandbox Code Playgroud)
可以代替使用,但这取决于您。