Integer Break整数分割——一种全新的解法

       这道题目是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不一定为整数,所以根据实际情况取更为接近的整数,然后分割相乘得到最大值。代码略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值