2017-04-17 13 views
0

배열의 각 항목을 취하여 서로 곱한 다음 최대 배수를 찾고 싶습니다.각 값에 서로 다른 값을 곱하는 방법

나는 내가 cycle 방법에 착륙 할 때까지 많은 것들을 시도하고이있어 지금 막혔어요 :

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

    return outArray.max 
end 

무엇 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를 사용합니다. itIsSeadabilityThing. –

답변

4

두 가지 가장 큰 값을 찾을 수 있습니다. 당신이 가장 큰 하나의별로 다른 값을 찾으려면

[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(:*) 

대신 사용할 수는 있지만 귀하에게 달려 있습니다.