leetcode_818

Your car starts at position 0 and speed +1 on an infinite number line. (Your car can go into negative positions.)

Your car drives automatically according to a sequence of instructions A (accelerate) and R (reverse).

When you get an instruction "A", your car does the following: position += speed, speed *= 2.

When you get an instruction "R", your car does the following: if your speed is positive then speed = -1 , otherwise speed = 1. (Your position stays the same.)

For example, after commands "AAR", your car goes to positions 0->1->3->3, and your speed goes to 1->2->4->-1.

Now for some target position, say the length of the shortest sequence of instructions to get there.

Example 1:
Input: 
target = 3
Output: 2
Explanation: 
The shortest instruction sequence is "AA".
Your position goes from 0->1->3.

Example 2:
Input: 
target = 6
Output: 5
Explanation: 
The shortest instruction sequence is "AAARA".
Your position goes from 0->1->3->7->7->6.

Note:

  • 1 <= target <= 10000.

Solutions

  1. dynamic programming with recursion O(nlog(n)) S(nlog(n))

  2. After moved n times, the total length is: 2^0 + 2^1 + .. 2^(n - 1) = 2^n - 1.

  3. This solution is based on the intuition that the number of steps is minimum when we firstly moving staight forward to the place nearest to the target. There are two cases, suppose 2 ^ (n - 1) < target < 2 ^ n:

    • Move n steps, then move backwards, ie: solve a minimal subproblem with target = 2 ^ n - 1 - target

    • Move n - 1 steps, move n steps backwards, then move forward, ie: solve two minimal subproblems.

      • Or move backwards 1 step after moved n - 1 steps, then try to move n steps forward.

  4. As there are n subproblems in total and we need to scan(backward) log(n) times when solving each subproblem, the time complexity is nlog(n).

  1. dynamic programming with iteration

  1. bfs search

  2. Use pruning to avoid TLE. Ie. dont geting away from the target.

  1. dijkstra

Last updated

Was this helpful?