题目描述
题目链接:
https://www.acwing.com/problem/content/24/
思路分析
做这个题之前大家先了解个数学知识,这里我贴上y总的证明过程,大家就对这个题会有一个清晰的认知
- 时间复杂度分析:
当 n 比较大时,n 会被拆分成 [n/3] 个数,我们需要计算这么多次减法和乘法,所以时间复杂度是 O(n)
代码实现
class Solution
{
public:
int maxProductAfterCutting(int length)
{
if(length>=2 && length<=3) return length-1;
int res=1;
if(length%3==2)res*=2,length-=2;
if(length%3==1)res*=4,length-=4;
while(length)
{
res*=3;
length-=3;
}
return res;
}
};