错误在第12行,我不知道为什么我无法添加数字。任何帮助深表感谢。
说明:编写一个采用数组的方法。如果数组中的一对数字总和为零,则返回这两个数字的位置。如果没有数字对总和为零,则返回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}")
答案 0 :(得分:2)
idx2
可能会溢出您阵列的容量:
想象。 nums = [1,2,3]
,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
因此,在下一次迭代中,您将调用
nums[idx2]
# same as
nums[3]
# ERROR! there is only 3 numbers in nums
并尝试理解此代码
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