You are given an integer n
. A 0-indexed integer 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 max(0,1,1,2,1,3,2,3) = 3.
Example 2:
Input: n = 2 Output: 1 Explanation: According to the given rules, nums = [0,1,1]. The maximum is max(0,1,1) = 1.
Example 3:
Input: n = 3 Output: 2 Explanation: According to the given rules, nums = [0,1,1,2]. The maximum is max(0,1,1,2) = 2.
Constraints:
0 <= n <= 100
This problem asks us to generate an array nums
based on specific rules and then find the maximum value within that array. The rules for generating the array are:
nums[0] = 0
nums[1] = 1
nums[2 * i] = nums[i]
(even indices)nums[2 * i + 1] = nums[i] + nums[i + 1]
(odd indices)The constraints specify that 0 <= n <= 100
, meaning the array will have at most 101 elements.
The solution involves iteratively building the nums
array according to the rules. We initialize the array with the first two elements (nums[0] = 0
, nums[1] = 1
). Then, we iterate from i = 2
to n
. For each i
, we check if it's even or odd:
nums[i] = nums[i/2]
(rule 3). We use bitwise right shift (>> 1
) for efficient integer division by 2.nums[i] = nums[i/2] + nums[i/2 + 1]
(rule 4). Again, bitwise right shift is used.After generating the array, we find the maximum element using built-in functions like max()
in Python or Arrays.stream().max().getAsInt()
in Java, max_element
in C++, slices.Max
in Go, and Math.max(...nums)
in Typescript.
Time Complexity: O(n)
The algorithm iterates through the array once to generate it and then iterates (or uses a built-in function which has O(n) complexity) once to find the maximum element. Therefore, the overall time complexity is linear with respect to the input n
.
Space Complexity: O(n)
The space complexity is also linear because we need to store the nums
array, which has a size of n + 1
.
class Solution:
def getMaximumGenerated(self, n: int) -> int:
if n < 2:
return n
nums = [0] * (n + 1)
nums[1] = 1
for i in range(2, n + 1):
nums[i] = nums[i >> 1] if i % 2 == 0 else nums[i >> 1] + nums[(i >> 1) + 1]
return max(nums)
n
is less than 2, we return n
directly because the maximum element will be n
itself.nums
of size n + 1
and initialize nums[0]
to 0 and nums[1]
to 1.i = 2
to n
, applying the rules to populate the nums
array using conditional logic and bitwise right shift for efficiency.max()
function efficiently finds the maximum value in the nums
array.The other language implementations follow the same approach, differing only in syntax and built-in functions used for array manipulation and finding the maximum element.