阅读 68

力扣每日一题 - 获取生成数组中的最大值

这是我参与8月更文挑战的第25天,活动详情查看:8月更文挑战

8.23 - 1646. 获取生成数组中的最大值

题意

给你一个整数 n 。按下述规则生成一个长度为 n + 1 的数组 nums :

规则一:nums[0] = 0 规则二:nums[1] = 1 规则三:当 2 <= 2 * i <= n 时,nums[2 * i] = nums[i] 规则四:当 2 <= 2 * i + 1 <= n 时,nums[2 * i + 1] = nums[i] + nums[i + 1] 返回生成数组 nums 中的 最大 值。

示例1:

输入:n = 7
输出:3
解释:根据规则:
  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
因此,nums = [0,1,1,2,1,3,2,3],最大值 3
复制代码

示例2:

输入:n = 2
输出:1
解释:根据规则,nums[0]、nums[1] 和 nums[2] 之中的最大值是 1
复制代码

示例3:

输入:n = 3
输出:2
解释:根据规则,nums[0]、nums[1]、nums[2] 和 nums[3] 之中的最大值是 2
复制代码

分析

本题给出两种方案解决

  • 先循环生成nums数组,之后再升序取最后一个值就是最大的,返回数组最后一项即可
  • 先循环生成nums数组,保存一个变量max,循环中比较每一项与max的大小,如果比max大,就赋值max,最后返回max即可

当然这里生成的nums数组需要去读懂 题意 哦,解答一下就是奇数项按 规则三 去添加数组对应项,偶数项按 规则四 去添加数组对应项

方案一

var getMaximumGenerated = function (n) {
  let nums = [0, 1];
  if (n < 2) return nums[n];
    
  for (let i = 2; i <= n; i++) {
    let mutilple = Math.floor(i / 2);
    if (i % 2 === 0) {
      nums[2 * mutilple] = nums[mutilple];
    }
    if (i % 2 === 1) {
      nums[2 * mutilple + 1] = nums[mutilple] + nums[mutilple + 1];
    }
  }
    
  let sortArr = nums.sort((a , b) => {
      return a - b
  })
  return sortArr[sortArr.length - 1]
};
复制代码

image-20210823222558169.png

方案二

var getMaximumGenerated = function (n) {
  let nums = [0, 1];
  let max = 0;
  if (n < 2) return nums[n];
  for (let i = 2; i <= n; i++) {
    let mutilple = Math.floor(i / 2);
    if (i % 2 === 0 ) {
        nums[2 * mutilple] = nums[mutilple]
        if (nums[2 * mutilple] > max) max = nums[2 * mutilple]
    }
    if (i % 2 === 1) {
        nums[2 * mutilple + 1] = nums[mutilple] + nums[mutilple + 1]
        if (nums[2 * mutilple + 1] > max) max = nums[2 * mutilple + 1]
    }
  }
  return max;
};
复制代码

image-20210823222632952.png

结语

本题难度不大,毕竟是我能写出来的 😂 ,话说这内存消耗为啥这么大呢? 换了方式也大!!

文章分类
前端