Integer Break 找到乘积最大的拆分
来源:互联网 发布:xboxone运行windows 编辑:程序博客网 时间:2024/06/11 18:55
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.
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.
假设现在要计算 n = 10,且我们已经知道前面的 n = 2 到 9 的最大拆分乘积。这些信息存在cache数组中。
此时可以取: 1 + 9,此时的乘积是 1 * max ( 9 , cache[ 9 ] ) (可以选择9不拆分了,也可以选择9继续拆分成更小的)
也可以取, 2 + 8, 此时的乘积是 2 * max ( 8, cache [ 8 ] )
也可以取, 3 + 7, 此时的乘积是 3 * max ( 7, cache [ 7 ] )
也可以取, 4 + 6, 此时的乘积是 4 * max ( 6, cache [ 6 ] )
也可以取, 5 + 5, 此时的乘积是 5 * max ( 5, cache [ 5 ] )
也可以取, 6 + 4, 但这个跟 4 + 6重复了。
后面也不需要再计算了。
总结:
for firstNum = 1...n/2 :
curMulti = firstNum * max( n - firstNum, cache[ n - firstNum ] )
curMaxMulti = max ( curMaxMulti, curMulti )
cache[ i ] = curMaxMulti
时间复杂度O( n^2 )
空间复杂度O( n )
运行时间:
代码:
public class IntegerBreak { public int integerBreak(int n) { int[] cache = new int[n + 1]; cache[2] = 1; int i = 3; while (i <= n) { int max = Integer.MIN_VALUE; for (int j = 1; j <= i / 2; j++) { max = Math.max(max, j * (Math.max(i - j, cache[i - j]))); } cache[i] = max; i++; } return cache[n]; }}
1 0
- Integer Break 找到乘积最大的拆分
- leetcode343-Integer Break(整数拆分求最大乘积)
- 乘积最大的拆分
- 343. Integer Break (划分整数使乘积最大)
- [LeetCode] Integer Break 切割整数,求取最大乘积
- ZJU2037 Parliament - 乘积最大的整数拆分
- [OpenJudge-NOI]乘积最大的拆分
- xuptoj 1298: 找到最大的乘积
- leetcode Integer Break 整数拆分
- Leetcode - Dynamic Programming - 343. Integer Break(划分整数得到最大乘积)
- leetcode 343. Integer Break DFS深度优先遍历 + 最大子元素乘积
- POJ NOI MATH-7652 乘积最大的拆分
- LeetCode Integer Break(整数拆分问题)
- poj 1032 拆分数字使乘积最大
- 整数拆分并且乘积最大问题
- leetcode 343. Integer Break ->可以证明,拆成的3越多,最后的乘积越大
- 对于1个正整数N,将其拆分成几个正整数的和,如何拆分可使得其乘积最大?
- 将一个正整数拆分成若干个互不相同的正整数且乘积最大(JS)
- Modbus-RTU通讯协议中CRC校验码的计算步骤
- Strlcpy和strlcat——一致的、安全的字符串拷贝和串接函数
- iOS coredata的使用及版本升级
- SHA:安全散列算法 .
- 获取jar包中的目录及文件
- Integer Break 找到乘积最大的拆分
- 搜索主元素
- 什么是LSB
- WebSocket的一个小例子
- 正则表达式的使用
- RSA-SHA1 signature .
- PHP类中的成员属性和成员方法
- javascript局部变量与全局变量,一个实例全搞定
- 拷贝构造函数