Minimum Costs Using Train Line

# https://leetcode.com/problems/minimum-costs-using-the-train-line/

# 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.

# Ex1:
# Input: regular = [1,6,9,5], express = [5,2,3,10], expressCost = 8
# Output: [1,7,14,19]
# Explanation: The diagram above shows how to reach stop 4 from stop 0 with minimum cost.
# - Take the regular route from stop 0 to stop 1, costing 1.
# - Take the express route from stop 1 to stop 2, costing 8 + 2 = 10.
# - Take the express route from stop 2 to stop 3, costing 3.
# - Take the regular route from stop 3 to stop 4, costing 5.
# The total cost is 1 + 10 + 3 + 5 = 19.
# Note that a different route could be taken to reach the other stops with minimum cost.

# Ex2:
# Input: regular = [11,5,13], express = [7,10,6], expressCost = 3
# Output: [10,15,24]
# Explanation: The diagram above shows how to reach stop 3 from stop 0 with minimum cost.
# - Take the express route from stop 0 to stop 1, costing 3 + 7 = 10.
# - Take the regular route from stop 1 to stop 2, costing 5.
# - Take the express route from stop 2 to stop 3, costing 3 + 6 = 9.
# The total cost is 10 + 5 + 9 = 24.
# Note that the expressCost is paid again to transfer back to the express route.

# reg[i] = reg[i-1] + cost or exp[i-1] + cost
# exp[i] = exp[i-1] + cost or reg[i-1] + cost + 8

# Time: O(n), Space: O(n)
def minimumCost(regular, express, expressCost):
    n = len(regular)
    if n == 0:
        return []

    reg = [0 for _ in range(n+1)]
    exp = [0 for _ in range(n+1)]

    exp[0] = expressCost

    for i in range(1, n+1):
        regCost = regular[i-1]
        expCost = express[i-1]
        reg[i] = min(reg[i-1]+regCost, exp[i-1]+regCost)
        exp[i] = min(exp[i-1]+expCost, reg[i-1]+expCost+expressCost)

    res = []
    for i in range(1, n+1):
        res.append(min(reg[i], exp[i]))

    return res

def main():
    # Ex1: [1,7,14,19]
    regular = [1,6,9,5]
    express = [5,2,3,10]
    expressCost = 8
    print(minimumCost(regular, express, expressCost))

    # Ex2: [10,15,24]
    regular = [11,5,13]
    express = [7,10,6]
    expressCost = 3
    print(minimumCost(regular, express, expressCost))

if __name__ == "__main__":
    main()```

Last updated