1646 获取生成数组中的最大值(模拟)

1. 问题描述:

给你一个整数 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

提示:

  • 0 <= n <= 100

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/get-maximum-in-generated-array

2. 思路分析:

分析题目可以知道我们模拟整个数组元素的生成过程即可,需要分情况进行讨论这样根据奇数与偶数情况确定循环的次数:当n为奇数的时候那么遍历的次数为n / / 2,因为每一次循环可以生成两个数组元素,例如当n = 7的时候,那么总的元素个数为8,一开始nums[0],nums[1]已知所以总共还需要生成6个元素,所以三次循环就可以了,因为python语言for循环中是取不到右端点的所以当n为奇数的时候需要在除以2的基础上加1,因为是偶数是可以整除2的,所以当为偶数的时候循环的长度也为n // 2,但是当n为偶数的时候生成的元素长度为奇数个所以需要在循环结束之后生成数组中的最后一个元素,我们可以在生成元素的时候就比较数组元素中的最大值,对结果集进行更新即可,这种题目结合具体的例子会更好编写代码

3. 代码如下:

class Solution:
    def getMaximumGenerated(self, n: int) -> int:
        if n == 0: return 0
        if n == 1: return 1
        # 分为偶数与奇数的两种情况
        nums = [0] * (n + 1)
        res = 1
        nums[0], nums[1] = 0, 1
        length = n // 2
        if n % 2 != 0:
            # 奇数
            length += 1
        for i in range(1, length):
            nums[2 * i] = nums[i]
            nums[2 * i + 1] = nums[i] + nums[i + 1]
            res = max(res, nums[2 * i], nums[2 * i + 1])
        if n % 2 == 0: nums[n] = nums[n // 2]
        return max(res, nums[n])

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值