diff --git a/4sum.java b/4sum.java new file mode 100644 index 0000000..8d09643 --- /dev/null +++ b/4sum.java @@ -0,0 +1,30 @@ +class Solution { + public List> fourSum(int[] nums, int target) { + Arrays.sort(nums); + List> list = new ArrayList<>(); + for(int i = 0; i < nums.length - 3; i++){ + if(i > 0 && nums[i] == nums[i - 1]) continue; + for(int j = i + 1; j < nums.length - 2; j++){ + if(j > i + 1 && nums[j] == nums[j - 1]) continue; + twoSum(i, j, (long)target, nums, list); + } + } + return list; + } + public void twoSum(int i, int j, long target, int[] nums, List> list){ + long modifiedTarget = target - (nums[i] + nums[j]); + int left = j + 1, right = nums.length - 1; + while(left < right){ + int sum = nums[left] + nums[right]; + if(sum == modifiedTarget){ + list.add(Arrays.asList( + nums[i], nums[j], nums[left], nums[right])); + left++; right--; + while(left < right && nums[left] == nums[left - 1]) left++; + while(left < right && nums[right] == nums[right + 1]) right--; + } + else if(sum > modifiedTarget) right--; + else left++; + } + } +}