三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
# @param {Integer[]} nums
# @return {Integer[][]}
def three_sum(nums)
arr = nums.sort
tmp_arr = Array.new
arr.each_with_index do |_, a_index|
next if a_index != 0 && arr[a_index] == arr[a_index - 1]
start = a_index
left = a_index + 1
right = arr.length - 1
while left < right
sum = arr[start] + arr[left] + arr[right]
right -= 1 if sum > 0
left += 1 if sum < 0
if sum.zero?
tmp_arr << [arr[start], arr[left], arr[right]]
left += 1
right -= 1
end
end
end
p tmp_arr.uniq
end