xinyu04

导航

LeetCode 343 Integer Break 数学

Given an integer n, break it into the sum of k positive integers, where \(k\geq 2\), and maximize the product of those integers.

Return the maximum product you can get.

Solution

假设 \(n>4\) 时,且如果存在一个因数 \(f>4\), 那么我们可以换成 \(2,(f-2)\) 这两个因子,因为对于 product:

\[2(f-2) = 2f-4>f \]

因此可以发现,对于大于4的因数,可以进行分解。但这并不是最优的,考虑一个例子 \(6\):

\[6 \rightarrow 3*3>2*2*2 \]

所以更优的分解是因数 \(3\)。具体来说,求解不等式:

\[3(f-3)\geq f \rightarrow f\ge 5 \]

所以当 \(n\ge 5\) 时,分解按照 \(3\) 的最大数量。 但对于 \(4\) 来说,显然最优分解为:

\[4\rightarrow 2*2>3*1 \]

点击查看代码
class Solution {
private:
    int ans=1;
public:
    int integerBreak(int n) {
        if(n==2)return 1;
        if(n==3)return 2;
        if(n==4)return 4;
        while(n>4){
            ans*=3;n-=3;
        }
        ans*=n;
        return ans;
    }
};

posted on 2022-06-01 15:52  Blackzxy  阅读(14)  评论(0编辑  收藏  举报