File tree Expand file tree Collapse file tree 1 file changed +55
-0
lines changed Expand file tree Collapse file tree 1 file changed +55
-0
lines changed Original file line number Diff line number Diff line change
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
+
1
56
/**
2
57
* @param {number[] } nums
3
58
* @param {number } goal
You can’t perform that action at this time.
0 commit comments