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

      

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).

Note: You may assume that n is not less than 2 and not larger than 58.

这道题目是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、付费专栏及课程。

余额充值