Skip to content

2739 Total Distance Traveled

Approach 1 O(n)

class Solution:
    def distanceTraveled(self, mainTank: int, additionalTank: int) -> int:
        total = 0
        used_in_main = 0
        while mainTank > 0:
            mainTank -= 1
            total += 10
            used_in_main += 1
            # check if we can refill or not
            if used_in_main %5 == 0:
                if additionalTank > 0:
                    additionalTank -= 1
                    mainTank += 1            
        return total

Approach 2 O(1) lee

Lee真的牛, solution here.

假设我们有mainTank (M) = 13, additionalTank (A) = 3.

我们总共能跑的数量可以分为两部分:

  • mainTank自带的, \(M\)
  • 由于我们跑的好,additionalTank补充的, x = f(M,A)

难点在于怎么判定f(M,A)的关系式.

M  M  M  M  M   A  M  M  M  M   A   M  M  M  M   A
1 [2  3  4  5]  6 [7  8  9 10]  11 [12 13 14 15] 16

我们在simulate的时候,mainTank的第一升油要作为pseudo-oil-from-additional-tank, 这样,你就在M-1中寻找,最多能组成几个4的倍数. 因此,我们可以得到:

\[ \begin{aligned} x &= f(M,A) = min(\frac{M-1}{4}, A) \\ \text{total} &= (M + x) * 10 \end{aligned} \]

where x is the number of additionalTank we can use, and total is the total distance we can travel.

class Solution:
    def distanceTraveled(self, mainTank: int, additionalTank: int) -> int:
        return (mainTank + min((mainTank-1)//4, additionalTank)) * 10