Skip to content

Commit 4b55359

Browse files
authored
Create 1755-closest-subsequence-sum.js
1 parent 8fc2003 commit 4b55359

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

1755-closest-subsequence-sum.js

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} goal
4+
* @return {number}
5+
*/
6+
var minAbsDifference = function(a, b) {
7+
let n = a.length, m = (n / 2) >> 0, r = n - m;
8+
let ans = 2e9;
9+
const {max, min, abs} = Math
10+
const va = [], vb = [];
11+
for(let i=0;i<1<<m;++i) {
12+
let tmp=0;
13+
for(let j=0;j<m;++j) {
14+
if(i>>j&1) tmp+=a[j];
15+
}
16+
ans=min(ans,abs(tmp-b));
17+
va.push(tmp);
18+
}
19+
// sort(va.begin(), va.end());
20+
va.sort((a, b) => a - b)
21+
for(let i=0;i<1<<r;++i) {
22+
let tmp=0;
23+
for(let j=0;j<r;++j) {
24+
if(i>>j&1) tmp+=a[j+m];
25+
}
26+
ans=min(ans,abs(tmp-b));
27+
let k=b-tmp;
28+
let pos=lower_bound(va, k);
29+
for(let j=pos-1;j<=pos+1;++j) {
30+
if(j>=0 && j<va.length) {
31+
ans=min(ans, abs(va[j]+tmp-b));
32+
}
33+
}
34+
}
35+
return ans;
36+
};
37+
38+
function lower_bound(array, arg1, arg2, arg3, arg4) {
39+
let first;
40+
let last;
41+
let value;
42+
let less;
43+
if (arg3 === undefined) {
44+
first = 0;
45+
last = array.length;
46+
value = arg1;
47+
less = arg2;
48+
} else {
49+
first = arg1;
50+
last = arg2;
51+
value = arg3;
52+
less = arg4;
53+
}
54+
55+
if (less === undefined) {
56+
less = function (a, b) { return a < b; };
57+
}
58+
59+
let len = last - first;
60+
let middle;
61+
let step;
62+
while (len > 0) {
63+
step = Math.floor(len / 2);
64+
middle = first + step;
65+
if (less(array[middle], value, middle)) {
66+
first = middle;
67+
first += 1;
68+
len = len - step - 1;
69+
} else {
70+
len = step;
71+
}
72+
}
73+
return first;
74+
};
75+

0 commit comments

Comments
 (0)