-3

Say for a given positive integer number n, you have to find a level k so that

1 + 2 + 3 + ... + k = S is below or equals n

but S + k + 1 is above n.

For example in python:

def find_level(n):
    level = 1
    while n > 0:
        n -= level
        level += 1
    return level - 1

What is the O magnitude of this function?

Robert Harvey
  • 200,592

1 Answers1

3
  1. Simplify:

    def find_level(n):
        level = 0
        while n > 0:
            level += 1
            n -= level
        return level
    
  2. Get the closed form for the highest n per level:

    n = sum(x = 0 to level, x) = level * (level + 1) / 2

  3. Solve that for level using the quadratic formula or some other method:

    0.5 * level2 + 0.5 * level - n = 0

    level = -.5 + sqrt(.25 + 2 * n)

Your algorithm is obviously O(sqrt(n)).

Deduplicator
  • 9,209