15. 3Sum
Medium
Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]]
such that i != j
, i != k
, and j != k
, and nums[i] + nums[j] + nums[k] == 0
.
Notice that the solution set must not contain duplicate triplets.
Example 1:
Input: nums = [-1,0,1,2,-1,-4]
Output: [[-1,-1,2],[-1,0,1]]
Example 2:
Input: nums = []
Output: []
Example 3:
Input: nums = [0]
Output: []
Constraints:
0 <= nums.length <= 3000
-105 <= nums[i] <= 105
Solution
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums = sorted(nums)
length = len(nums)
result = []
for index, value in enumerate(nums):
if index > 0 and nums[index-1] == value:
continue
left = index+1
right = length-1
while left < right:
total = value + nums[left] + nums[right]
if total == 0:
# We are done
result.append([nums[index],nums[left], nums[right]])
left += 1
# Find non repeating next index
while left < right and nums[left] == nums[left-1]:
left += 1
elif total < 0:
left += 1
else:
right -= 1
return result
Last updated