Skip to content

Commit ff61479

Browse files
authored
Create 1755.Closest-Subsequence-Sum.cpp
1 parent adb38d9 commit ff61479

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
class Solution {
2+
public:
3+
int minAbsDifference(vector<int>& nums, int goal)
4+
{
5+
int m = nums.size()/2;
6+
int n = nums.size()-m;
7+
vector<int>nums1(nums.begin(), nums.begin()+m);
8+
vector<int>nums2(nums.begin()+m, nums.end());
9+
10+
vector<int>a = getSubSetsSum(nums1);
11+
vector<int>b = getSubSetsSum(nums2);
12+
13+
int ret = INT_MAX;
14+
for (auto x: a)
15+
{
16+
auto iter = lower_bound(b.begin(), b.end(), goal-x);
17+
if (iter!=b.end())
18+
ret = min(ret, abs(goal-x - *iter));
19+
if (iter!=b.begin())
20+
ret = min(ret, abs(goal-x - *prev(iter)));
21+
}
22+
for (auto x: b)
23+
{
24+
auto iter = lower_bound(a.begin(), a.end(), goal-x);
25+
if (iter!=a.end())
26+
ret = min(ret, abs(goal-x - *iter));
27+
if (iter!=a.begin())
28+
ret = min(ret, abs(goal-x - *prev(iter)));
29+
}
30+
return ret;
31+
}
32+
33+
// vector<int> getSubSetsSum(vector<int>&nums)
34+
// {
35+
// vector<int> sums;
36+
// int m = nums.size();
37+
// for (int state=0; state<(1<<m); state++)
38+
// {
39+
// int sum = 0;
40+
// for (int i=0; i<32; i++)
41+
// {
42+
// if ((state>>i)&1)
43+
// sum += nums[i];
44+
// }
45+
// sums.push_back(sum);
46+
// }
47+
// sort(sums.begin(), sums.end());
48+
// return sums;
49+
// }
50+
51+
vector<int> getSubSetsSum(vector<int>&nums)
52+
{
53+
vector<int> sums({0});
54+
for (int x: nums)
55+
{
56+
vector<int>temp;
57+
int i=0, j=0, n = sums.size();
58+
while (i<n && j<n)
59+
{
60+
if (sums[i]+x < sums[j])
61+
{
62+
temp.push_back(sums[i]+x);
63+
i++;
64+
}
65+
else
66+
{
67+
temp.push_back(sums[j]);
68+
j++;
69+
}
70+
}
71+
while (i<n)
72+
{
73+
temp.push_back(sums[i]+x);
74+
i++;
75+
}
76+
while (j<n)
77+
{
78+
temp.push_back(sums[j]);
79+
j++;
80+
}
81+
sums = temp;
82+
}
83+
return sums;
84+
}
85+
};

0 commit comments

Comments
 (0)