Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get.
For example, given n = 2, return 1 (2 = 1 + 1); given n = 10, return 36 (10 = 3 + 3 + 4).
发现3是最优分割,这里证明:
便于证明我们假设拆分成
nx
n
x
个实数 x,现在找最优值;
目标函数
f(x)=xnx
f
(
x
)
=
x
n
x
求导 :
ln(f(x))=nx∗lnx(ln(f(x)))′=nx2(1−lnx)
l
n
(
f
(
x
)
)
=
n
x
∗
l
n
x
(
l
n
(
f
(
x
)
)
)
′
=
n
x
2
(
1
−
l
n
x
)
所以 lnx=1,x=e l n x = 1 , x = e 时候取最大值;
最接近e的数字是3,然后是2,所以能取3取3,不够就取2;
class Solution {
public int integerBreak(int n) {
if(n==2) return 1;
if(n==3) return 2;
int res = 1;
while(n>4){
res*=3;
n-=3;
}
return res*n;
}
}