From 4f8ad03b8d48a008da0221c4427273855d51c339 Mon Sep 17 00:00:00 2001 From: chetan-2002 <77783033+chetan-2002@users.noreply.github.com> Date: Sun, 23 Oct 2022 10:04:30 +0530 Subject: [PATCH] Create 4sum.cpp Added code for the Leetcode Problem 4Sum. --- leetcode/4Sum.cpp | 67 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 leetcode/4Sum.cpp diff --git a/leetcode/4Sum.cpp b/leetcode/4Sum.cpp new file mode 100644 index 0000000..585e805 --- /dev/null +++ b/leetcode/4Sum.cpp @@ -0,0 +1,67 @@ +// 4 Sum - Leetcode +// https://leetcode.com/problems/4sum/ +class Solution +{ +public: + vector> fourSum(vector &num, int target) + { + vector> res; + + if (num.empty()) + return res; + int n = num.size(); + sort(num.begin(), num.end()); + + for (int i = 0; i < n; i++) + { + + int target_3 = target - num[i]; + + for (int j = i + 1; j < n; j++) + { + + int target_2 = target_3 - num[j]; + + int front = j + 1; + int back = n - 1; + + while (front < back) + { + + int two_sum = num[front] + num[back]; + + if (two_sum < target_2) + front++; + + else if (two_sum > target_2) + back--; + + else + { + + vector quadruplet(4, 0); + quadruplet[0] = num[i]; + quadruplet[1] = num[j]; + quadruplet[2] = num[front]; + quadruplet[3] = num[back]; + res.push_back(quadruplet); + + while (front < back && num[front] == quadruplet[2]) + ++front; + + while (front < back && num[back] == quadruplet[3]) + --back; + } + } + + while (j + 1 < n && num[j + 1] == num[j]) + ++j; + } + + while (i + 1 < n && num[i + 1] == num[i]) + ++i; + } + + return res; + } +}; \ No newline at end of file