File tree 1 file changed +48
-0
lines changed
1 file changed +48
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } nums
3
+ * @return {number }
4
+ */
5
+ const minimumDifference = function ( nums ) {
6
+ const n = nums . length , len = n / 3
7
+ const maxCompare = ( p , c ) => { return p === c ? 0 : ( p > c ? - 1 : 1 ) }
8
+ const minCompare = ( p , c ) => { return p === c ? 0 : ( p < c ? - 1 : 1 ) }
9
+ const maxHeap = new PriorityQueue ( { compare : maxCompare } )
10
+ const minHeap = new PriorityQueue ( { compare : minCompare } )
11
+ const pre = Array ( n ) . fill ( Infinity ) , suffix = Array ( n ) . fill ( - Infinity )
12
+ for ( let i = 0 , sum = 0 ; i < 2 * len ; i ++ ) {
13
+ const cur = nums [ i ]
14
+ maxHeap . enqueue ( cur )
15
+ sum += cur
16
+ if ( maxHeap . size ( ) > len ) {
17
+ const tmp = maxHeap . dequeue ( )
18
+ sum -= tmp
19
+ }
20
+ if ( maxHeap . size ( ) === len ) {
21
+ pre [ i ] = sum
22
+ }
23
+ }
24
+
25
+ for ( let i = n - 1 , sum = 0 ; i >= len ; i -- ) {
26
+ const cur = nums [ i ]
27
+ minHeap . enqueue ( cur )
28
+ sum += cur
29
+ if ( minHeap . size ( ) > len ) {
30
+ const tmp = minHeap . dequeue ( )
31
+ sum -= tmp
32
+ }
33
+ if ( minHeap . size ( ) === len ) {
34
+ suffix [ i ] = sum
35
+ }
36
+ }
37
+
38
+ // console.log(pre, suffix)
39
+ let res = Infinity
40
+ for ( let i = len - 1 ; i < n - len ; i ++ ) {
41
+ res = Math . min ( res , pre [ i ] - suffix [ i + 1 ] )
42
+ }
43
+ return res
44
+ } ;
45
+
46
+ // another
47
+
48
+
1
49
/**
2
50
* @param {number[] } nums
3
51
* @return {number }
You can’t perform that action at this time.
0 commit comments