-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path0312-burst-balloons.js
More file actions
35 lines (29 loc) · 1.54 KB
/
0312-burst-balloons.js
File metadata and controls
35 lines (29 loc) · 1.54 KB
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
32
33
34
35
/**
* Burst Balloons
* Time Complexity: O(N^3)
* Space Complexity: O(N^2)
*/
var maxCoins = function (inputNumbers) {
const paddedValues = [1, ...inputNumbers, 1];
const originalBalloonCount = inputNumbers.length;
const totalPaddedLength = originalBalloonCount + 2;
const memoizationTable = Array(totalPaddedLength).fill(0).map(() => Array(totalPaddedLength).fill(0));
for (let currentSpan = 1; currentSpan <= originalBalloonCount; currentSpan++) {
for (let segmentStartIdx = 1; segmentStartIdx <= originalBalloonCount - currentSpan + 1; segmentStartIdx++) {
const segmentEndIdx = segmentStartIdx + currentSpan - 1;
for (let splitPointIdx = segmentStartIdx; splitPointIdx <= segmentEndIdx; splitPointIdx++) {
const boundaryLeft = segmentStartIdx - 1;
const boundaryRight = segmentEndIdx + 1;
const coinsFromSplit = paddedValues[boundaryLeft] * paddedValues[splitPointIdx] * paddedValues[boundaryRight];
const leftIntervalSum = memoizationTable[boundaryLeft][splitPointIdx];
const rightIntervalSum = memoizationTable[splitPointIdx][boundaryRight];
const totalPotentialCoins = leftIntervalSum + rightIntervalSum + coinsFromSplit;
memoizationTable[boundaryLeft][boundaryRight] = Math.max(
memoizationTable[boundaryLeft][boundaryRight],
totalPotentialCoins
);
}
}
}
return memoizationTable[0][originalBalloonCount + 1];
};