Skip to content

Commit 1013531

Browse files
authored
Update 1755-closest-subsequence-sum.js
1 parent 726f53c commit 1013531

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

1755-closest-subsequence-sum.js

+55
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,58 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} goal
4+
* @return {number}
5+
*/
6+
const minAbsDifference = function (nums, goal) {
7+
let min = Math.abs(goal)
8+
if (!nums.length) return min
9+
const generateSums = (a) => {
10+
let sums = []
11+
for (let i = 0; i < a.length; i++) {
12+
const l = sums.length
13+
for (let j = 0; j < l; j++) {
14+
sums.push(sums[j] + a[i])
15+
min = Math.min(min, Math.abs(sums[j] + a[i] - goal))
16+
if (min === 0) return
17+
}
18+
sums.push(a[i])
19+
min = Math.min(min, Math.abs(a[i] - goal))
20+
if (min === 0) return
21+
}
22+
return sums
23+
}
24+
25+
const n1 = nums.slice(0, Math.ceil(nums.length / 2))
26+
const n2 = nums.slice(Math.ceil(nums.length / 2), nums.length)
27+
const sums1 = generateSums(n1)
28+
if (min === 0) return min
29+
const sums2 = generateSums(n2)
30+
if (min === 0) return min
31+
32+
sums2.sort((a, b) => a - b)
33+
for (let i = 0; i < sums1.length; i++) {
34+
if (min === 0) return min
35+
let l = 0
36+
let r = sums2.length
37+
let sum
38+
while (l < r) {
39+
const h = Math.floor((l + r) / 2)
40+
sum = sums1[i] + sums2[h]
41+
min = Math.min(min, Math.abs(sum - goal))
42+
if (min === 0) return min
43+
if (sum - goal < 0) {
44+
l = h + 1
45+
} else {
46+
r = h
47+
}
48+
}
49+
}
50+
return min
51+
}
52+
53+
54+
// another
55+
156
/**
257
* @param {number[]} nums
358
* @param {number} goal

0 commit comments

Comments
 (0)