LeetCode #343 - Integer Break - Medium
来源:互联网 发布:网络作者介绍 编辑:程序博客网 时间:2024/06/05 15:59
Problem
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.Note: You may assume that n is not less than 2 and not larger than 58.
Hint:
- There is a simple O(n) solution to this problem.
- You may check the breaking results of n ranging from 7 to 10 to discover the regularities.
Example
given n = 2, return 1 (2 = 1 + 1); given n = 10, return 36 (10 = 3 + 3 + 4).
Algorithm
整理一下题意:给定一个整数n,将n分成至少两个正整数的和,将分成的整数乘起来得到一个积,要求返回积的最大值。假设2<=n<=58。
其实没有明确的思路,所以先尝试枚举。
由上表猜测,最大拆分中需要尽可能多的3。以此为思路,对于n的最大积,通过n每次减3和积每次乘3得到。代码如下。
//时间复杂度O(n)class Solution {public: int integerBreak(int n) { if(n==2) return 1; if(n==3) return 2; if(n==4) return 4; int max=1; while(n>4){ max*=3; n-=3; } return max*n; }};
完成题目后提交,很幸运通过了。但对于其数学原理还是不明白,于是在网上查找资料,发现 @liyuanbhu 老师的博客里有简单的数学证明。下面将这段证明引用如下。感谢 @liyuanbhu 老师的工作!
原文地址:http://blog.csdn.net/liyuanbhu/article/details/51198124
作者:@liyuanbhu
首先证明拆出的因子大于 4 是不行的。设 x 是一个因子,x>4,那么可以将这个因子再拆成两个因子 x−2 和 2,易证 (x−2)×2>x。所以不能有大于 4 的因子。
4 这个因子也是可有可无的,4=2+2,4=2×2。因此 4 这个因子可以用两个 2 代替。
除非没有别的因子可用,1 也不能选作因子。一个数 x 当它大于 3 时,有 (x−2)×2>(x−1)×1。
这样呢,就只剩下 2 和 3 这两个因子可以选了。下面再证明 3 比 2 好。
一个数 x=3m+2n,那么 f=3m×2n=3m×2x−3m2 可以对它取个对数。
lnf===mln3+nln2mln3+x−3m2ln2x2ln2+(ln3−32ln2)m
其中 ln3−32ln2>0 所以 f 是 m 的增函数,也就是说 m 越大越好。所以 3 越多越好。再多说一句,如果拆出的因子不限于整数的话,可以证明e=2.718… 是最佳的选择。
- LeetCode #343 - Integer Break - Medium
- LeetCode解题报告 343. Integer Break [medium]
- Leetcode 343. Integer Break (Medium) (cpp)
- 343. Integer Break #Medium
- [Medium]Integer Break
- 343. Integer Break -Medium
- 【LeetCode-343】Integer Break
- LeetCode 343 Integer Break
- LeetCode[343]Integer Break
- LeetCode-343:Integer Break
- LeetCode-343:Integer Break
- LeetCode[343] Integer Break
- LeetCode 343 Integer Break
- Leetcode #343 Integer Break
- 【leetcode 343】Integer Break
- Leetcode Integer Break 343
- LeetCode.343 Integer Break
- LeetCode 343: Integer Break 题解
- Git工作流指南:集中式工作流
- uboot中的mmu和cache开启(基本协处理器操作)
- 大学生活“十要十不要”
- 关于形参和实参
- 微信、凤凰、头条……逼疯你的除了老板,还有后台
- LeetCode #343 - Integer Break - Medium
- 2016年末闲谈iOS开发的未来
- IOS开发基础03(Label,textField)
- LeetCode笔记:412. Fizz Buzz
- 静态h5页面没有后台直接访问本地json文件
- Spring IOC基础 注解方式
- Java 程序员学习中各阶段的建议
- 面向对象----观察者模式(示例)
- Spring+Quartz实现周末、节假日排除的定时任务