forked from AnasImloul/Leetcode-Solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFilling Bookcase Shelves.js
31 lines (22 loc) · 967 Bytes
/
Filling Bookcase Shelves.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Runtime: 92 ms (Top 69.01%) | Memory: 42.4 MB (Top 98.59%)
var minHeightShelves = function(books, shelfWidth) {
let booksArr = []
for(let i = 0; i < books.length; i++) {
let remainingWidth = shelfWidth - books[i][0]
let bookHeight = books[i][1]
let maxHeight = bookHeight
let prevSum = booksArr[i - 1] !== undefined ? booksArr[i - 1] : 0
let minSumHeight = bookHeight + prevSum
for(let x = i - 1; x >= 0 ; x--) {
let prevBookWidth = books[x][0]
let prevBookHeight = books[x][1]
if(remainingWidth - prevBookWidth < 0) break
remainingWidth -= prevBookWidth
prevSum = booksArr[x - 1] !== undefined ? booksArr[x - 1] : 0
maxHeight = Math.max(maxHeight, prevBookHeight)
minSumHeight = Math.min(prevSum + maxHeight, minSumHeight)
}
booksArr[i] = minSumHeight
}
return booksArr[books.length - 1]
};