LeetCode #1646. Get Maximum in Generated Array

题目

1646. Get Maximum in Generated Array


解题方法

n=0、n=1单独处理,初始化一个长度为n+1的数组,前两位分别是0和1,设置maxnum=1,然后设置i=1开始遍历,当i<n//2时,计算nums[2i]和nums[2i+1],再更新maxnum。当循环结束时判断n的奇偶性,奇数的话说明nums[2i+1]是在数组内的,否则偶数的话就只需要计算到nums[2i]即可,这样之后再更新一下最大值就好了。
时间复杂度:O(n)
空间复杂度:O(n)


代码

class Solution:
    def getMaximumGenerated(self, n: int) -> int:
        if not n:
            return 0
        if n == 1:
            return 1
        
        nums = [0 for _ in range(n + 1)]
        nums[1] = 1
        maxnum = 1
        
        i = 1
        while i < n // 2:
            nums[2 * i] = nums[i]
            nums[2 * i + 1] = nums[i] + nums[i + 1]
            maxnum = max(maxnum, nums[2 * i], nums[2 * i + 1])
            i += 1
        else:
            if n % 2:
                nums[2 * i] = nums[i]
                nums[2 * i + 1] = nums[i] + nums[i + 1]
                maxnum = max(maxnum, nums[2 * i], nums[2 * i + 1])
            else:
                nums[2 * i] = nums[i]
                maxnum = max(maxnum, nums[2 * i])
        
        return maxnum
posted @ 2020-12-04 10:54  老鼠司令  阅读(88)  评论(0编辑  收藏  举报