这道题目是leetcode上的343题,当然其他大神的解法也很好,这篇文章旨在为大家提供一种新的思路,有时候,很多问题也可以从编程本身以外进行思考,从而找到解决办法。好了,废话不多说,下面进行分析。
假设输入的整数是k,我们要把它分成n份,使得这n份之积最大,根据直觉(事实上也正是如此),当这n份全部相等的时候,积可以最大。接下来就是想办法确定n的值了。
显然,这n份的积为y=(k/n)^n,所以现在就是找到使y最大的n,由于y一定大于0,我们对y取自然对数,当对数值最大时,等价于y的值最大。取对数后y变为lny = n(lnk-lnn)。求导有(过程略)lny' = lnk-lnn-1=ln(k/ne)。显然,当n>k/e时,导数小于0,当0<n<k/e时,导数大于0,所以lny在n=k/e时取得最大值。由于k/e不一定为整数,所以根据实际情况取更为接近的整数,然后分割相乘得到最大值。代码略。