Minimum Time to Finish the Race LeetCode solution in JavaScript

1
var minimumFinishTime = function (tires, changeTime, numLaps) {
2
const n = tires.length;
3
const smallestTire = Math.min(...tires.map((t) => t[1]));
4
const maxSameTire =
5
Math.floor(Math.log(changeTime) / Math.log(smallestTire)) + 1;
6
const sameTireLast = Array(n).fill(0);
7

8
// DP array tracking what is the min cost to complete lap i using same tire
9
const sameTire = Array(maxSameTire + 1).fill(Infinity);
10
for (let lap = 1; lap <= maxSameTire; lap++) {
11
tires.forEach((tire, i) => {
12
sameTireLast[i] += tire[0] * tire[1] ** (lap - 1);
13
sameTire[lap] = Math.min(sameTire[lap], sameTireLast[i]);
14
});
15
}
16

17
const dp = Array(numLaps + 1).fill(Infinity);
18
for (let i = 1; i < numLaps + 1; i++) {
19
if (i <= maxSameTire) dp[i] = sameTire[i];
20
// at each lap, we can either use the same tire up to this lap (sameTire[i])
21
// or a combination of 2 different best times,
22
// eg lap 6: use best time from lap 3 + lap 3
23
// or from lap 4 + lap 2
24
// or lap 5 + lap 1
25
for (let j = 1; j < i / 2 + 1; j++) {
26
dp[i] = Math.min(dp[i], dp[i - j] + changeTime + dp[j]);
27
}
28
}
29
return dp[numLaps];
30
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0