L'errore è sulla linea 12 e non sono sicuro del perchénon è possibile aggiungere numeri. Qualsiasi aiuto è molto apprezzato. Istruzioni: scrivi un metodo che richiede una serie di numeri. Se una coppia di numeri nella matrice somma a zero, restituire le posizioni di quei due numeri. Se nessuna coppia di numeri somma a zero, restituisci nil
.
def two_sum(nums)
idx1 = 0
idx2 = 1
while idx1 < nums.length
if nums[idx1] + nums[idx2] == 0
return [idx1, idx2]
end
idx2 += 1
if idx2 == nums.length
idx1 += 1
idx2 = idx1 + 1
end
end
return nil
end
puts("two_sum([1, 3, 5, -3]) == [1, 3]: #{two_sum([1, 3, 5, -3]) == [1, 3]}")
puts("two_sum([1, 3, 5]) == nil: #{two_sum([1, 3, 5]) == nil}")
risposte:
2 per risposta № 1idx2
potrebbe sovraccaricare la capacità dell'array:
Immaginare. nums = [1,2,3]
, così nums.length
è 3, idx1 = 1
, idx2 = 2
idx2 += 1 # ok now idx2 is 3
if idx2 == nums.length # ok true, idx2 == 3
idx1 += 1 # mmm, cool idx1 now 2
idx2 = idx1 + 1 # idx2 is 3
end
Quindi nella prossima iterazione chiamerai
nums[idx2]
# same as
nums[3]
# ERROR! there is only 3 numbers in nums
E prova a capire questo codice
def two_sums(nums)
nums[0..-2].each.with_index do |n,i|
nums[i+1..-1].each.with_index do |m,j|
return [i, i+j+1] if m + n == 0
end
end
nil
end