Back to all solutions

#1646 - Get Maximum in Generated Array

Problem Description

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.

Solution

/**
 * @param {number} n
 * @return {number}
 */
var getMaximumGenerated = function(n) {
  if (n === 0) return 0;

  const generatedArray = new Array(n + 1).fill(0);
  generatedArray[1] = 1;
  let maximumValue = 1;

  for (let i = 1; i <= Math.floor(n / 2); i++) {
    if (2 * i <= n) {
      generatedArray[2 * i] = generatedArray[i];
      maximumValue = Math.max(maximumValue, generatedArray[2 * i]);
    }
    if (2 * i + 1 <= n) {
      generatedArray[2 * i + 1] = generatedArray[i] + generatedArray[i + 1];
      maximumValue = Math.max(maximumValue, generatedArray[2 * i + 1]);
    }
  }

  return maximumValue;
};