DEV Community

Ruairí O'Brien
Ruairí O'Brien

Posted on

Day 15 - Get Maximum in Generated Array

The Problem

You are given an integer n. An array nums of length n + 1 is generated in the following way:

  • nums[0] = 0
  • nums[1] = 1
  • nums[2 * i] = nums[I] when 2 <= 2 * i <= n
  • nums[2 * i + 1] = nums[i] + nums[i + 1] when 2 <= 2 * i + 1 <= n

Return the maximum integer in the array nums​​​.

Example 1:

Input: n = 7
Output: 3
Explanation: According to the given rules:
  nums[0] = 0
  nums[1] = 1
  nums[(1 * 2) = 2] = nums[1] = 1
  nums[(1 * 2) + 1 = 3] = nums[1] + nums[2] = 1 + 1 = 2
  nums[(2 * 2) = 4] = nums[2] = 1
  nums[(2 * 2) + 1 = 5] = nums[2] + nums[3] = 1 + 2 = 3
  nums[(3 * 2) = 6] = nums[3] = 2
  nums[(3 * 2) + 1 = 7] = nums[3] + nums[4] = 2 + 1 = 3
Hence, nums = [0,1,1,2,1,3,2,3], and the maximum is 3.
Enter fullscreen mode Exit fullscreen mode

Example 2:

Input: n = 2
Output: 1
Explanation: According to the given rules, the maximum between nums[0], nums[1], and nums[2] is 1.
Enter fullscreen mode Exit fullscreen mode

Example 3:

Input: n = 3
Output: 2
Explanation: According to the given rules, the maximum between nums[0], nums[1], nums[2], and nums[3] is 2.
Enter fullscreen mode Exit fullscreen mode

Constraints:

  • 0 <= n <= 100

My Tests

import pytest
from .Day14_GetMaximumInGeneratedArray import Solution

s = Solution()


@pytest.mark.parametrize(
    "n,expected",
    [
        (7, 3),
        (2, 1),
        (3, 2),
        (0, 0),
    ],
)
def test_get_maximum_generated(n, expected):
    assert s.getMaximumGenerated(n) == expected
Enter fullscreen mode Exit fullscreen mode

My Solution

class Solution:
    def getMaximumGenerated(self, n: int) -> int:
        l = n + 1
        if n == 0:
            return 0
        nums = [0] * l
        nums[1] = 1
        current_max = 1

        for i in range(1, l):
            x = 2 * i
            if x > 1 and x <= n:
                nums[x] = nums[i]
            if x + 1 > 1 and x + 1 <= n:
                nums[x + 1] = nums[i] + nums[i + 1]
            current_max = max(current_max, nums[i])

        return current_max
Enter fullscreen mode Exit fullscreen mode

Analysis

Alt Text

Alt Text

My Commentary

This one was probably the easiest yet. I just followed the instructions in the description. I am sure there's a lot of optimisation I could have done but leaving this one here for today.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay