1. 程式人生 > 其它 >leetcode 1646. 獲取生成陣列中的最大值,一個典型遞迴的例子

leetcode 1646. 獲取生成陣列中的最大值,一個典型遞迴的例子

技術標籤:C/C++程式設計序筆記leetcode

1646. 獲取生成陣列中的最大值

難度簡單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;
    }
};