From c30f79ced4db6548271a2dbc7ca9aaa53bfb9c4e Mon Sep 17 00:00:00 2001 From: monubukky <65822986+monubucky@users.noreply.github.com> Date: Tue, 1 Oct 2024 22:43:36 -0400 Subject: [PATCH] Create 3Sum.py This program solves 3 Sum array problem in data structures --- data_structures/arrays/3Sum.py | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 data_structures/arrays/3Sum.py diff --git a/data_structures/arrays/3Sum.py b/data_structures/arrays/3Sum.py new file mode 100644 index 000000000000..4c2ab473e981 --- /dev/null +++ b/data_structures/arrays/3Sum.py @@ -0,0 +1,36 @@ +def three_sum(nums): + # Sort the array to simplify the problem + nums.sort() + result = [] + + # Iterate over the array + for i in range(len(nums)): + # Skip duplicates for the first element + if i > 0 and nums[i] == nums[i - 1]: + continue + + # Two pointers approach + left, right = i + 1, len(nums) - 1 + while left < right: + total = nums[i] + nums[left] + nums[right] + + if total == 0: + # Found a valid triplet + result.append([nums[i], nums[left], nums[right]]) + left += 1 + right -= 1 + + # Skip duplicates for the second and third elements + while left < right and nums[left] == nums[left - 1]: + left += 1 + while left < right and nums[right] == nums[right + 1]: + right -= 1 + + elif total < 0: + # Move the left pointer to increase the sum + left += 1 + else: + # Move the right pointer to decrease the sum + right -= 1 + + return result