Back to blog
Dec 01, 2024
2 min read

LeetCode 18: 4Sum

Leetcode 18: 4Sum solution in Python

Problem Description

LeetCode Problem 18

Given an array nums of n integers, return an array of all the unique quadruplets [nums[a], nums[b], nums[c], nums[d]] such that:

  • 0 <= a, b, c, d < n
  • a, b, c, and d are distinct.
  • nums[a] + nums[b] + nums[c] + nums[d] == target

You may return the answer in any order.

 

Example 1:

Input: nums = [1,0,-1,0,-2,2], target = 0 Output: [[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

Example 2:

Input: nums = [2,2,2,2,2], target = 8 Output: [[2,2,2,2]]

 

Constraints:

  • 1 <= nums.length <= 200
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109

Difficulty: Medium

Tags: array, two pointers, sorting

Rating: 89.07%

Solution

Here’s my Python solution to this problem:

class Solution:
    def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
        nums.sort()
        n = len(nums)
        res = []

        for i in range(n-3):
            if i > 0 and nums[i] == nums[i - 1]: continue

            for j in range(i+1, n-2):
                if j > i+1 and nums[j] == nums[j-1]: continue

                l, r = j + 1, n-1

                while l < r:
                    s = nums[i] + nums[j] + nums[l] + nums[r]

                    if s == target:
                        res.append([nums[i] , nums[j] , nums[l] , nums[r]])

                        while l < r and nums[l] == nums[l+1]: l += 1
                        while l < r and nums[r] == nums[r-1]: r -= 1

                        l += 1
                        r -= 1
                
                    elif s < target: l += 1
                    else: r -= 1
        return res

Complexity Analysis

The solution has the following complexity characteristics:

  • Time Complexity: O(n4)O(n^4)
  • Space Complexity: O(n)O(n)

Note: This is an automated analysis and may not capture all edge cases or specific algorithmic optimizations.