当前位置: 首页 > news >正文

有没有在家做的兼职网站百度app下载安装官方免费版

有没有在家做的兼职网站,百度app下载安装官方免费版,中国建设银行网站荆门网点查询系统,试剂网站建设343. 整数拆分 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。示例 2: 输入: n 10 输出: 36…

343. 整数拆分

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积 。

示例 1:

输入: n = 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。

示例 2:

输入: n = 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

提示:

  • 2 <= n <= 58

思路:(动态规划)

法一:

对于正整数 n,当 n ≥ 2 时,可以拆分成至少两个正整数的和。令 x 是拆分出的第一个正整数,则剩下的部分是 n − x,n − x 可以不继续拆分,或者继续拆分成至少两个正整数的和。由于每个正整数对应的最大乘积取决于比它小的正整数对应的最大乘积,因此可以使用动态规划求解。

创建数组 dp,其中 dp[i] 表示将正整数 i 拆分成至少两个正整数的和之后,这些正整数的最大乘积。特别地,0 不是正整数,1 是最小的正整数,0 和 1 都不能拆分,因此 dp[0] = dp[1] = 0。

当 i ≥ 2 时,假设对正整数 i 拆分出的第一个正整数是 j(1 ≤ j < i),则有以下两种方案:

  • 将 i 拆分成 j 和 i − j 的和,且 i − j 不再拆分成多个正整数,此时的乘积是 j × (i − j);
  • 将 i 拆分成 j 和 i − j 的和,且 i − j 继续拆分成多个正整数,此时的乘积是 j × dp[i − j]。

因此,当 j 固定时,有 dp[i] = max⁡(j × (i − j), j × dp[i − j])。由于 j 的取值范围是 1 到 i − 1,需要遍历所有的 jjj 得到 dp[i] 的最大值,因此可以得到状态转移方程如下:

dp[i]=max⁡1≤j<i{max⁡(j×(i−j),j×dp[i−j])}d p[i]=\max _{1 \leq j<i}\{\max (j \times(i-j), j \times d p[i-j])\} dp[i]=1j<imax{max(j×(ij),j×dp[ij])}

最终得到 dp[n] 的值即为将正整数 n 拆分成至少两个正整数的和之后,这些正整数的最大乘积。

法二:

由于分解成正整数的乘积最大,若分解的正整数有1,不会使乘积变大,所以分解的正整数大于等于2;

  • 又至少分解2个正整数,当 n = 2,或 n = 3 时,最大的乘积分别为1和2;
  • n > 4 时,分解的最小整数为2,否则只会变小;

举一些栗子:

4 = 2 + 2 , 2 * 2 = 4
5 = 2 + 3,  2 * 3 = 6
6 = 3 + 3 , 3 * 3 = 9
7 = 2 + 2 + 3 = 2 + 5 
8 = 2 + 3 + 3 = 2 + 6
9 = 4 + 2 + 3 = 2 + 7
10 = 3 + 3 + 4 = 3 + 7
  • 创建数组 dp,其中 dp[i] 表示将正整数 i 拆分成至少两个正整数的和之后,这些正整数的最大乘积。
  • 由以上可知分解的都可表示为 2 或 3 与另一个数 j,最大乘积就是2 或 3 乘以另一个数的最大乘积dp[j].

代码:(Java)

法一:

public class IntegerBreak {public static void main(String[] args) {// TODO Auto-generated method stubint n = 10;System.out.println(integerBreak(n));}int[] dp = new int[n + 1];dp[1] = 1;for (int i = 2; i <= n; i++) {for (int j = 1; j <= i - 1; j++) {dp[i] = Math.max(dp[i], Math.max(j * dp[i - j], j * (i - j)));}}return dp[n];
}

法二:

public class IntegerBreak {public static void main(String[] args) {// TODO Auto-generated method stubint n = 10;System.out.println(integerBreak(n));}public static int integerBreak(int n) {if(n / 2 < 2) {return n - 1;}int[] dp = new int[n + 1];dp[2] = 2;dp[3] = 3;for(int i = 4; i <= n; i++) {dp[i] = Math.max(2*dp[i-2], 3*dp[i-3]);}return dp[n];}
}

运行结果:

在这里插入图片描述

复杂度分析:

时间复杂度O(n2)O(n^2)O(n2),其中 n 是给定的正整数。对于从 2 到 n 的每一个整数都要计算对应的 dp 值,计算一个整数对应的 dp 值需要 O(n) 的时间复杂度,因此总时间复杂度是 O(n2)。(法二时间复杂度为:O(n))

空间复杂度:O(n),其中 n 是给定的正整数。创建一个数组 dp,其长度为 n+1

注:仅供学习参考!

题目来源:力扣。

http://www.hkea.cn/news/521533/

相关文章:

  • 做网站如何分工百度推广登录平台客服
  • 网站建设如何提案万网域名注册信息查询
  • 创意二维码制作网站企业网络营销推广案例
  • 论坛型网站怎么做百度高级检索入口
  • 做百度移动网站排搜素引擎优化
  • 公司创建一个网站需要多少钱想做百度推广找谁
  • 做文献ppt模板下载网站有哪些常德政府网站
  • 青岛网站建设公司排行外链工具在线
  • 网站怎么做显得简洁美观seo数据是什么意思
  • 阿里巴巴开通诚信通后网站怎么做网络优化网站
  • 东莞手机网站价格便宜个人免费建站软件
  • 电子商务网站建设的步骤一般为百度100%秒收录
  • 做企业网站怎么样免费的推广软件下载
  • 拓普网站建设美国搜索引擎
  • 网站开发者工资冯耀宗seo视频教程
  • 软件开发各阶段工作量比例搜索引擎优化的基础是什么
  • 网站怎么做才能将名声打响云搜索app
  • 南阳做网站优化哪家好一级域名生成二级域名
  • 3322动态域名官网郑州seo联系搜点网络效果好
  • 网络营销渠道的类型河北seo基础教程
  • 做微信网站多少钱seo内部优化包括哪些内容
  • 中国城乡建设网站网络优化公司排名
  • 个人网站做淘宝客教程torrentkitty磁力搜索引擎
  • 广州北京网站建设seo培训讲师招聘
  • 手机上免费自己做网站网络营销案例分享
  • 长沙大型网站建设谷歌账号
  • 大兴德艺网站建设发布悬赏任务的推广平台
  • html5制作网站模板百度产品大全首页
  • 贵阳网站建设贵阳百度推广怎么推广
  • 瓮安建设局网站google play三件套