2017-04-17 80 views
0

我想獲取數組中的每個項目,將它們相乘,然後找到最大的倍數。如何將每個值乘以每個其他值

我嘗試了很多東西,直到我降落在了cycle方法,然後得到這個,我現在堅持:

def adjacentElementsProduct(inputArray) 
    outArray = inputArray.cycle(inputArray.length){|num| num[0] * num[1]}.to_a 

    return outArray.max 
end 

這不起作用,因爲很明顯,有知道什麼num[0]沒有(規定)的能力爲Ruby或num[1]是。

例如:

adjacentElementsProduct([3, 6, -2, -5, 7, 3]) => 21 

因爲3*7是當所有的數字相乘得到的最大的產品。

+1

我相信你應該修復這個例子。用'[3,6,-2,-5,7,3]'你會得到'42(= 6x7)',而不是'21'作爲答案。 –

+0

在Ruby中,不使用camelCase作爲變量或方法名稱的習慣用法。相反,我們使用snake_case。 itIsAReadabilityThing。 –

回答

4

你可以找到兩個最大的值。有沒有必要去嘗試每一種組合:

[3, 6, -2, -5, 7, 3].max(2).inject(:*) 
#=> 42 

如果你仍然想用組合做到這一點,使用combination方法:

[3, 6, -2, -5, 7, 3].combination(2) 
        .map { |f, s| f * s } 
        .max 
#=> 42 

如果你想找到的最大的一個接其他值使用each_cons

[3, 6, -2, -5, 7, 3].each_cons(2) 
        .map {|f, s| f * s } 
        .max 
#=> 21 

此外,

max_by {|f, s| f * s }.inject(:*) 

可以用來代替,但這取決於你。

相關問題