Back to all solutions

#2361 - Minimum Costs Using the Train Line

Problem Description

A train line going through a city has two routes, the regular route and the express route.

Both routes go through the same n + 1 stops labeled from 0 to n. Initially, you start on the regular route at stop 0.

You are given two 1-indexed integer arrays regular and express, both of length n.

regular[i] describes the cost it takes to go from stop i - 1 to stop i using the regular route, and express[i] describes the cost it takes to go from stop i - 1 to stop i using the express route.

You are also given an integer expressCost which represents the cost to transfer from the regular route to the express route.

Note that:

  • There is no cost to transfer from the express route back to the regular route.
  • You pay expressCost every time you transfer from the regular route to the express route.
  • There is no extra cost to stay on the express route.

Return a 1-indexed array costs of length n, where costs[i] is the minimum cost to reach stop i from stop 0.

Note that a stop can be counted as reached from either route.

Solution

/**
 * @param {number[]} regular
 * @param {number[]} express
 * @param {number} expressCost
 * @return {number[]}
 */
var minimumCosts = function(regular, express, expressCost) {
  const n = regular.length;
  const result = new Array(n);
  let regularDp = 0;
  let expressDp = expressCost;

  for (let i = 1; i <= n; i++) {
    const newRegularDp = Math.min(regularDp, expressDp) + regular[i - 1];
    const newExpressDp = Math.min(regularDp + expressCost, expressDp) + express[i - 1];

    regularDp = newRegularDp;
    expressDp = newExpressDp;
    result[i - 1] = Math.min(regularDp, expressDp);
  }

  return result;
};