leetcode 1646. 獲取生成陣列中的最大值,一個典型遞迴的例子
阿新 • • 發佈:2021-01-26
技術標籤:C/C++程式設計序筆記leetcode
難度簡單7收藏分享切換為英文接收動態反饋
給你一個整數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
通過次數5,225提交次數10,472
class Solution { public: int generateNums(int n) { if(n<=0) return 0; if(n==1) return 1; if(n==2) return 1; if(n==3) return 2; if(n&1) { return generateNums(n/2)+generateNums(n/2+1); } else { return generateNums(n/2); } } int getMaximumGenerated(int n) { int maxnum=0; for(int i=0;i<=n;i++) { maxnum=max(maxnum,generateNums(i)); } return maxnum; } };