math and geometry September 12, 2022

Elimination game

Time O(n) Space O(n) Open original problem

We will recursively eleminate people from beginning to end and then return backword with the same logic until only one person left, then return that.

class Solution:
    def lastRemaining(self, n: int) -> int:
        def eliminate(numbersCount, isForward, base, step):
            if numbersCount == 1:
                return base + 1
            if isForward or numbersCount % 2 == 1:
                base += step // 2

            step *= 2
            numbersCount //= 2
            return eliminate(numbersCount, not isForward, base, step)

        return eliminate(n, True, 0, 2)

Time Complexity: O(n)
Space Complexity: O(n)