diff --git a/checkstyle.xml b/checkstyle.xml
index d78724455af7..316563c3b5a0 100644
--- a/checkstyle.xml
+++ b/checkstyle.xml
@@ -155,7 +155,7 @@
-
+
@@ -175,7 +175,7 @@
-
+
diff --git a/src/main/java/com/thealgorithms/misc/FourSumProblem.java b/src/main/java/com/thealgorithms/misc/FourSumProblem.java
new file mode 100644
index 000000000000..3a23304a0d78
--- /dev/null
+++ b/src/main/java/com/thealgorithms/misc/FourSumProblem.java
@@ -0,0 +1,58 @@
+package com.thealgorithms.misc;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class FourSumProblem {
+
+ public static List> fourSum(int[] nums, int target) {
+ List> result = new ArrayList<>();
+
+ if (nums == null || nums.length < 4) {
+ return result; // if array is too small to have 4 numbers, return empty result
+ }
+
+ // Sort the array first
+ Arrays.sort(nums);
+
+ // Iterate through the array, fixing the first two elements
+ for (int i = 0; i < nums.length - 3; i++) {
+ if (i > 0 && nums[i] == nums[i - 1]) continue; // Skip duplicates for the first element
+
+ for (int j = i + 1; j < nums.length - 2; j++) {
+ if (j > i + 1 && nums[j] == nums[j - 1]) continue; // Skip duplicates for the second element
+
+ // Use two pointers for the remaining two elements
+ int left = j + 1;
+ int right = nums.length - 1;
+
+ while (left < right) {
+ int sum = nums[i] + nums[j] + nums[left] + nums[right];
+
+ if (sum == target) {
+ // If we found a quadruplet, add it to the result list
+ result.add(Arrays.asList(nums[i], nums[j], nums[left], nums[right]));
+
+ // Skip duplicates for the third element
+ while (left < right && nums[left] == nums[left + 1]) left++;
+ // Skip duplicates for the fourth element
+ while (left < right && nums[right] == nums[right - 1]) right--;
+
+ // Move the pointers
+ left++;
+ right--;
+ } else if (sum < target) {
+ // If the sum is less than the target, move the left pointer to increase the sum
+ left++;
+ } else {
+ // If the sum is greater than the target, move the right pointer to decrease the sum
+ right--;
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+}