2016-04-03 11 views
-2

配列内の距離の最大値を計算するfindMax関数があります。例えば、**閉じる** Rubyプログラムの2つのループ

  • 入力:[10, 15, -5, 0, 20]
  • 出力:25 = 20 - (-5)

これはコードである:

def findMax array 
    max = 0 
    index1 = 0 
    index2 = 0 
    while index1 < array.length 
    while index2 < array.length 
     if array[index1] - array[index2] > max 
     max = array[index1] - array[index2] 
     end 
     index2 += 1 
    end 
    index1 += 1 
    end 
    return max 
end 

は、私の知る限りでは、アルゴリズムは正しいです。 JavaScriptで書いてあれば動作します。なぜindex1が変わらないのかわかりません。

+1

あなたの質問は何ですか? – sawa

+1

質問をするのを忘れました。 –

+1

出力 '25 = 20-5'はどういう意味ですか?それは文字列ですか?それは意味がないので、数値計算を表現していないことが分かります。 – sawa

答えて

2

正しく表示されません。 2番目のインデックスは、最初の反復の後の最後の要素を指しています。

ので

また
while index1 < array.length 

index2 = 0 

を置き、ここではRubyの素晴らしさを利用する方法シンプルな実装です:

array.minmax.map(&:abs).reduce(:-).abs 
+1

サポートしてくれてありがとうございます。私は 'abs'関数が必要ではないと思っています – docongthanh

+0

' 'array.minmax.reverse.reduce(:-)'はOPが1ライナーとして必要なことを行いますが、 'a_min、 a_max = array.minmax; a_max- a_min'の読みやすさ(またはパフォーマンスヒットが気にならなかった場合は 'array.max-array.min')であっても、メソッド連鎖は涼しいですが、読んだときに考える時が必要です。 –

+0

docongthanh、近く、葉巻はありません。 '.map(&:abs)'は不要ではなく、間違っています。あなたは '.abs'または(もっと良いと思いますが)' -array.minmax.reduce(:-) 'または(最善のことはI)@ Neil's#2を保持する必要があります。 (スイッチで眠って、✅?) –

関連する問題