2017-04-17 15 views
0

配列内の各アイテムを取り、それらを互いに乗算して、その倍数の最大値を求めます。各値にそれぞれの値を掛ける方法

私はcycle方法に着陸するまで、多くのことを試してみましたが、その後、これを持って、今で立ち往生しています:

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

    return outArray.max 
end 

Rubyは何を知っているための(明記)能力は明らかに存在しないので、これは動作しませんnum[0]または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を使用します。それは直面している。 –

答えて

4

2つの大きな値があります。あなたは最大1・バイ・他の値を検索する場合

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

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

あなたはまだの組み合わせでそれをしたい場合はcombinationメソッドを使用し、各組み合わせを試す必要はありません、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(:*) 

を代わりに使用できますが、それはあなた次第です。

関連する問題