Suma de Tres
Este problema consiste en encontrar cada posible combinación de 3 números sin repetirse tal que la suma de estos 3 números sea igual a 0
Solución
# @param {Integer[]} nums
# @return {Integer[][]}
def three_sum(nums)
nums = nums.sort
len = nums.length-1
prev = nil
result = []
for i in 0..len do
next if i>0 && nums[i-1] == nums[i]
to_search = -nums[i]
left=i+1
right = len
while left < right
current = nums[left]+nums[right]
if current == to_search
result << [nums[i], nums[left], nums[right]]
left+=1
while nums[left]==nums[left-1] and left<right
left+=1
end
elsif current > to_search
right-=1
else
left+=1
end
end
end
result
end
Este programa primero ordena la lista, luego usa el algoritmo que se usa en sumaDos para buscar dos números que sumados den un número objetivo, en este caso el opuesto del número que se está buscando actualmente.
Pero en este caso como estamos buscando todas las posibilidades diferentes entonces tomar en cuenta que se repitan varios valores entonces para encontrar cada posible dato diferente debemos mover el último índice hasta que el último valor sea diferente