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
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])
獲取生成陣列中的最大值
給你乙個整數 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 ...
獲得生成陣列中的最大值
leetcode 1646.獲得生成陣列中的最大值 給你乙個整數n。按下述規則生成乙個長度為n 1的陣列nums nums 0 0,nums 1 1。當2 2i n時,nums 2i nums i 當 2 2i 1 n時,nums 2i 1 nums i nums i 1 返回生成陣列nums中的最...
生成視窗最大值陣列
題目描述 有乙個整型陣列arr和乙個大小為w的視窗從陣列的最左邊滑到最右邊,視窗每次向右邊滑乙個位置,求每一種視窗狀態下的最大值。如果陣列長度為n,視窗大小為w,則一共產生n w 1個視窗的最大值 輸入描述 第一行輸入n和w,分別代表陣列長度和視窗大小 第二行輸入n個整數x,表示陣列中的各個元素 輸...