Solved, with help from solutions

This commit is contained in:
Jacob Delgado 2023-09-05 19:22:14 -07:00
parent d257ab3564
commit aae8698336

View File

@ -4,14 +4,52 @@ def threeSum(nums):
:rtype: List[List[int]] :rtype: List[List[int]]
""" """
# Always end at net zero from the sum # Always end at net zero from the sum
first = 0 # first = 0
second = 1 # endpoint = len(nums)-1
solutionSets = [] # solutionSets = []
for i in range(len(nums)): # # Handle edge-case of small list with only 3 variables
if nums[first] + nums[second] + nums[i] == 0: # if len(nums) == 3 and sum(nums) == 0:
solutionSets.append([nums[first], nums[second], nums[i]]) # solutionSets.append(nums)
# return solutionSets
# while first != len(nums)-2:
# for i in range(first+1, len(nums)):
# if nums[first] + nums[i] + nums[endpoint] == 0 and [nums[first], nums[i], nums[endpoint]] not in solutionSets:
# solutionSets.append([nums[first], nums[i], nums[endpoint]])
# else:
# endpoint -= 1
# first += 1
# return solutionSets
# Solution
nums.sort()
answer = []
# Loop through until the last triplet, solution relies on negative indexes
for i in range(len(nums) - 2):
if nums[i] > 0: # end the loop if the values are positive
break
if i > 0 and nums[i] == nums[i-1]: # skip the current i index if it's the same as the last one
continue
l = i + 1 # Begin the left index at i + 1
r = len(nums) - 1 # Begin the right index at the end
while l < r:
total = nums[i] + nums[l] + nums[r]
if total < 0: # If the total is negative, we increase the negative side to get closer to 0
l += 1
elif total > 0: # If the total is positive, we decrease the positive side to get closer to 0
r -= 1
else:
triplet = [nums[i], nums[l], nums[r]]
answer.append(triplet)
while l < r and nums[l] == triplet[1]: # Continue increasing the left index until a different
l += 1 # number is found to avoid duplicates
while l < r and nums[r] == triplet[2]: # Same with decreasing the right index
r -= 1
return answer
print(threeSum([-1,0,1,2,-1,-4])) print(threeSum([-1,0,1,2,-1,-4]))
print(threeSum([0,0,0]))
print(threeSum([0,0,0,0]))
print(threeSum([1,2,-2,-1]))