2016-04-03 26 views
-2

Bir dizideki uzaklığı en fazla hesaplayan bir findMax işlevim var. Örneğin,** Close ** Ruby programında iki döngü

  • girişi: [10, 15, -5, 0, 20]
  • çıkışı: Bu kod 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 
olarak bildiğim kadarıyla

, algoritma doğrudur; javascript yazıyorsa, çalışır. Neden index1 değişmez bilmiyorum.

+1

Sorunuz nedir:

Yani

index2 = 0 

Alternatif

while index1 < array.length 

sonra burada Ruby'nin harikaları yararlanmak için bir yol daha basit uygulamasıdır yer? – sawa

+1

Bir soru sormayı unuttun. –

+1

'25 = 20 - 5' çıkışı ne anlama geliyor? Bu bir ip mi? Sayısal bir hesaplamayı ifade etmediğini biliyorum çünkü o zaman mantıklı değil. – sawa

cevap

2

Doğru görünmüyor. İkinci indeks, ilk iterasyondan sonra son öğeye işaret eder.

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

Desteğiniz için teşekkürler ve bence 'abs' işlevine gerek yok – docongthanh

+0

Sanırım array.minmax.reverse.reduce (:-)' bir a-liner olarak ihtiyaç duyduğu şeyi yapacak, muhtemelen a_min yapsam da, a_max = dizi.minmax; okunabilirlik için a_max− a_min' (veya performans dizisini önemsemediysem bile array.max - array.min'), yöntem zincirleme güzeldir, ancak geri okurken düşünmeyi gerektirir. –

+0

docongthanh, yakın ama puro yok. .map (&: abs) 'gereksiz değil, yanlış. ".abs" veya (daha iyi, sanırım) -array.minmax.reduce (:-) 'ya da (en iyisi, ben) @ Neil'in # 2'sini tutmalısınız. (Düğmede uyurken, ✅?) –