File tree Expand file tree Collapse file tree 1 file changed +58
-0
lines changed
Expand file tree Collapse file tree 1 file changed +58
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * @param {number[] } blocks
3+ * @param {number } split
4+ * @return {number }
5+ */
6+ const minBuildTime = function ( blocks , split ) {
7+ const minHeap = new MinHeap ( )
8+ blocks . forEach ( ( block ) => minHeap . push ( block ) )
9+ while ( minHeap . size ( ) > 1 ) {
10+ minHeap . pop ( )
11+ minHeap . push ( minHeap . pop ( ) + split )
12+ }
13+ return minHeap . pop ( )
14+ }
15+
16+ class MinHeap {
17+ constructor ( ) {
18+ this . store = [ ]
19+ }
20+ size ( ) {
21+ return this . store . length
22+ }
23+ push ( value ) {
24+ this . store . push ( value )
25+ this . heapifyUp ( this . store . length - 1 )
26+ }
27+ pop ( ) {
28+ if ( this . store . length < 2 ) return this . store . pop ( )
29+ let result = this . store [ 0 ]
30+ this . store [ 0 ] = this . store . pop ( )
31+ this . heapifyDown ( 0 )
32+ return result
33+ }
34+ heapifyUp ( child ) {
35+ const parent = Math . floor ( ( child - 1 ) / 2 )
36+ if ( child && this . store [ child ] < this . store [ parent ] ) {
37+ const temp = this . store [ child ]
38+ this . store [ child ] = this . store [ parent ]
39+ this . store [ parent ] = temp
40+ this . heapifyUp ( parent )
41+ }
42+ }
43+ heapifyDown ( parent ) {
44+ const childs = [ 1 , 2 ]
45+ . map ( ( n ) => parent * 2 + n )
46+ . filter ( ( n ) => n < this . store . length )
47+ let child = childs [ 0 ]
48+ if ( childs [ 1 ] && this . store [ childs [ 1 ] ] < this . store [ child ] ) {
49+ child = childs [ 1 ]
50+ }
51+ if ( child && this . store [ child ] < this . store [ parent ] ) {
52+ const temp = this . store [ child ]
53+ this . store [ child ] = this . store [ parent ]
54+ this . store [ parent ] = temp
55+ this . heapifyDown ( child )
56+ }
57+ }
58+ }
You can’t perform that action at this time.
0 commit comments