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