From 7d297e8a5c1a4aae8d435328005b3f9213cb91f4 Mon Sep 17 00:00:00 2001 From: Kanakalatha Vemuru Date: Thu, 14 Oct 2021 09:46:12 +0530 Subject: [PATCH 1/2] Added Closest Subsequence Sum --- C++/Closest_Subsequence_Sum.cpp | 37 +++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 C++/Closest_Subsequence_Sum.cpp diff --git a/C++/Closest_Subsequence_Sum.cpp b/C++/Closest_Subsequence_Sum.cpp new file mode 100644 index 0000000..d647660 --- /dev/null +++ b/C++/Closest_Subsequence_Sum.cpp @@ -0,0 +1,37 @@ +class Solution { +public: + void generateSubset(vector &nums, int i, int j, vector &ans) { + if (i == j) { + ans.push_back(0); + return; + } + vector temp; + generateSubset(nums, i + 1, j, ans); + for (auto key: ans) { + temp.push_back(key); + temp.push_back(key + nums[i]); + } + + ans = temp; + } + + int minAbsDifference(vector& nums, int goal) { + vector left, right; + + generateSubset(nums, 0, nums.size()/2, left); + generateSubset(nums, nums.size()/2, nums.size(), right); + sort(left.begin(), left.end()); + sort(right.begin(), right.end()); + + int ans = abs(goal); + + for (int left_: left) { + int y = goal - left_; + int i = lower_bound(right.begin(), right.end(), y) - right.begin(); + if(i) ans = min(ans, abs(right[i-1]-y)); + if(i < right.size()) ans = min(ans, abs(right[i]-y)); + } + + return ans; + } +}; \ No newline at end of file From 4e3ca09aba77639a91151341788be9049cfc786c Mon Sep 17 00:00:00 2001 From: Kanakalatha Vemuru Date: Thu, 14 Oct 2021 09:49:31 +0530 Subject: [PATCH 2/2] Added the problem link --- C++/Closest_Subsequence_Sum.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/C++/Closest_Subsequence_Sum.cpp b/C++/Closest_Subsequence_Sum.cpp index d647660..8557fe6 100644 --- a/C++/Closest_Subsequence_Sum.cpp +++ b/C++/Closest_Subsequence_Sum.cpp @@ -1,3 +1,5 @@ +// https://leetcode.com/problems/closest-subsequence-sum/ + class Solution { public: void generateSubset(vector &nums, int i, int j, vector &ans) {