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

343. 整数拆分

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

注:仅供学习参考!

题目来源:力扣。

相关文章:

343. 整数拆分

343. 整数拆分 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。示例 2: 输入: n 10 输出: 36…...

SCAFFOLD: Stochastic Controlled Averaging for Federated Learning学习

SCAFFOLD: Stochastic Controlled Averaging for Federated Learning学习背景贡献论文思想算法局部更新方式全局更新方式实验总结背景 传统的联邦学习在数据异构(non-iid)的场景中很容易产生“客户漂移”(client-drift )的现象&#xff0c;这会导致系统的收敛不稳定或者缓慢。…...

第十四届蓝桥杯三月真题刷题训练——第 3 天

目录 题目1&#xff1a;门牌制作 题目描述 运行限制 代码&#xff1a; 题目2&#xff1a;货物摆放_long 题目描述 答案提交 运行限制 代码&#xff1a; 题目3&#xff1a;跳跃_dp 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码&#xff1a; 题目4&a…...

变量的四大存储类型static extern auto register

变量的四大存储类型static extern auto register外部变量&#xff08;全局变量&#xff09;extern----全局静态存储区定义 引用性声明❗易错点&#xff1a;函数之外未定义的变量一般是外部变量 extern全局变量 与 局部变量的区别‼️ 谨记&#xff1a;声明可以多次&#xff0c;…...

JavaScript基础五、语句

零、文章目录 文章地址 个人博客-CSDN地址&#xff1a;https://blog.csdn.net/liyou123456789个人博客-GiteePages&#xff1a;https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee&#xff1a;https://gitee.com/bluecusliyou/TechLearnGithub&#xff1a;https:…...

青龙面板399乐园

1.拉库 ql raw https://wjkjy.cn/wp-content/uploads/2023/03/1678104978-afaecb98a9df61e.js 2.抓包 7.26 399乐园 每天 七八毛左右 脚本已完成全部任务&#xff0c;自动提现 下载链接&#xff1a;https://3mao.lanzoul.com/izGDh084oogh 抓包链接 https://339.mhhuanyue.c…...

自动化注册组件

// components/index.js export default { install(app) { const req require.context(‘./’, false, /.vue$/) // console.log(req, ‘req’) req.keys().forEach((item) > { // console.log(item, ‘item’) const com req(item).default // console.log(com, ‘com’)…...

【JS代码优化一】分支优化篇

序&#xff1a;如何让代码看起来更优雅&#xff1f;代码是由文字堆叠起来的可以被机器执行的程序。它记载着相关信息&#xff08;状态&#xff09;、表达相关的情绪&#xff08;函数&#xff09;&#xff0c;所以如何能够写出简洁、优雅、健壮、可维护性强的程序至关重要。本系…...

软件测试-接口测试-补充

文章目录 1.持续集成2. mock测试3.Fiddler 抓包工具3.1 弱网测试4. webservice1.持续集成 持续集成概念 重复执行开发提交代码并集成到主干; aim 加速产品迭代 好处 快速发现问题 避免分支大幅度偏离主干 加速产品发布 工具 git:源代码版本工具github:代码仓库jenkins:持续…...

Spring笔记(5):Beans自动装配

为什么需要使用自动装配 在通过XML配置文件进行设置Bean元素注入与声明注册后&#xff0c;我们能够发现一个问题&#xff0c;在项目中是会存在大量对象的&#xff0c;不可能全部都写在XML文件中&#xff0c;那会显得非常的臃肿&#xff0c;不利于后期维护&#xff0c;所以需要用…...

Spark+Vue+Springboot 协同过滤额音乐推荐大数据深度学习项目

一、项目背景 随着互联网的发展,大数据的到来,传统的音乐行业受到了很大的冲击,原有的音乐数字化给人们生活带来了极大的便利。随着数字音乐的兴起,各大音乐平台层出不穷,人们在音乐平台上收听音乐的时,常常因为歌曲信息繁杂,而不能找到自己想听的音乐。为了解决这个问题,音乐…...

JDBC的实现(IDEA版)

前期准备 开发环境&#xff1a; IDEA 2021.1.3 JAVA 1.8 MYSQL 8.0.32 msql用户名:root 密码&#xff1a;123 下载MySQL JDBC 驱动 前往MySQL官网下载对应版本的MySQL Connector/J驱动 &#xff08;下载地址&#xff1a;https://dev.mysql.com/downloads/connector/j/&#xff…...

人员摔倒识别预警系统 人员跌倒检测算法 yolov7

人员摔倒识别预警系统 人员跌倒检测算法基于yolov7网络模型计算机识别技术&#xff0c;人员摔倒识别预警系统 人员跌倒检测算法对画面中人员摔倒进行实时检测识别抓拍告警。YOLOv7 的策略是使用组卷积来扩展计算块的通道和基数。研究者将对计算层的所有计算块应用相同的组参数和…...

Spring-Cloud-Gateway集成Nacos如何做负载均衡?

spring-cloud-alibaba的低版本 如果所用的SpringCloud和Nacos的版本信息如下&#xff1a; <spring-cloud.version>Hoxton.SR10</spring-cloud.version> <spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>网关的依赖如下&…...

【数据挖掘与商务智能决策】第四章 逻辑回归模型

逻辑回归模型算法原理 逻辑回归模型的数学原理 %matplotlib inline# 补充知识点:Sigmoid函数绘制 import matplotlib.pyplot as plt import numpy as npx = np.linspace(-6, 6) # 通过linspace()函数生成-6到6的等差数列,默认50个数 y = 1.0...

滚动升级回滚

滚动升级回滚 ReplicationController 资源文件 apiVersion: v1 kind: ReplicationController metadata:name: kubia-v1labels:app: kubia spec:replicas: 3template:metadata:name: kubialabels:app: kubiaspec:containers:- image: luksa/kubia:v1name: nodejes --- apiVer…...

2023/3/6 VUE - 组件传值【通信】方式

1 父亲传子代传值【子代使用父代的数据】 1.1 props传值 父亲给儿子传值&#xff1a; 爷爷给孙子传值&#xff1a; 这个props传值的方式&#xff0c;只能一代一代的往下传&#xff0c;不能跨代传值。 有一个问题&#xff1a;子组件不能修改父组件的值&#xff1a; 1.2 …...

MedCalc v20.217 医学ROC曲线统计分析参考软件

MedCalc是一款医学 ROC 曲线统计软件,用于ROC曲线分析的参考软件,医学工作者设计的医学计算器,功能齐全。它可以帮助医生快速作出普通的医学计算,从而对症下药。提供超过76种常用的规则和方法,包括:病人数据、单位参数、费用计算等等。甚至可以将图形另存为BMP,PNG,GIF…...

欢乐消除开心假日协议解密

欢乐消除开心假日协议解密协/议/流/量/解/密分析欢乐消除开心假日这款游戏流量的协议加密方式。序欢乐消除开心假日是一款合成模拟家装的游戏&#xff0c;在这个游戏中&#xff0c;你将成为一位充满热情的设计师&#xff0c;与好友一起经营工作室。你需要根据客户的需求重新设计…...

Android Service知识

一. 概览 Service 是一种可在后台执行长时间运行操作而不提供界面的应用组件。服务可由其他应用组件启动&#xff0c;而且即使用户切换到其他应用&#xff0c;服务仍将在后台继续运行。此外&#xff0c;组件可通过绑定到服务与之进行交互&#xff0c;甚至是执行进程间通信 (IPC…...

终极ZPL虚拟打印机指南:5步实现无硬件条码标签开发

终极ZPL虚拟打印机指南&#xff1a;5步实现无硬件条码标签开发 【免费下载链接】Virtual-ZPL-Printer An ethernet based virtual Zebra Label Printer that can be used to test applications that produce bar code labels. 项目地址: https://gitcode.com/gh_mirrors/vi/V…...

FRED应用:导入列表形式的BSDF数据

简介在FRED中&#xff0c;列表形式的BSDF数据可以使用如下两种方式。1. 按照FRED可以识别的数据格式直接导入作为散射模型。2. 使用BSDF数据拟合工具来产生合适的函数模型。数据文件的格式在FRED中能被识别的测试数据必须按照如下的规格形式。数据文件的开头包含两行&#xff0…...

DockDoor终极指南:快速掌握macOS窗口预览与高效切换

DockDoor终极指南&#xff1a;快速掌握macOS窗口预览与高效切换 【免费下载链接】DockDoor Window peeking, alt-tab and other enhancements for macOS 项目地址: https://gitcode.com/gh_mirrors/do/DockDoor 还在为macOS上繁琐的窗口切换而烦恼吗&#xff1f;DockDoo…...

为内容生成应用动态切换 Taotoken 上的不同模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为内容生成应用动态切换 Taotoken 上的不同模型 在内容创作类应用的开发中&#xff0c;一个常见的需求是根据不同的文本类型&#…...

5分钟掌握OBS虚拟摄像头:让所有视频软件都能用上专业直播效果

5分钟掌握OBS虚拟摄像头&#xff1a;让所有视频软件都能用上专业直播效果 【免费下载链接】obs-virtual-cam 项目地址: https://gitcode.com/gh_mirrors/obs/obs-virtual-cam 你是否曾经羡慕主播们精美的直播画面&#xff0c;却苦于无法在Zoom、Teams等日常软件中实现同…...

暗黑破坏神2角色编辑器终极指南:如何轻松打造完美角色

暗黑破坏神2角色编辑器终极指南&#xff1a;如何轻松打造完美角色 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 还在为暗黑破坏神2中无尽的刷装备、练级而烦恼吗&#xff1f;Diablo Edit2是一款…...

别再只会用`p`了!GDB调试C++结构体/类与数组的3个高级技巧与避坑指南

别再只会用p了&#xff01;GDB调试C结构体/类与数组的3个高级技巧与避坑指南 调试C代码时&#xff0c;你是否经常遇到这样的场景&#xff1a;面对一个复杂对象&#xff0c;用p *ptr命令后&#xff0c;终端输出像天书一样难以理解&#xff1f;结构体成员挤在一起&#xff0c;数…...

可编程投币器集成指南:从硬件连接到游戏积分映射

1. 项目概述&#xff1a;从“投币”到“积分”的硬件魔法“Insert Coin”——对于任何一个经历过街机黄金年代的玩家来说&#xff0c;这三个字背后所承载的&#xff0c;远不止是启动游戏的指令&#xff0c;更是一种充满仪式感的期待。如今&#xff0c;我们大多通过模拟器上的一…...

WELearn网课助手:5分钟掌握智能学习,告别熬夜刷课

WELearn网课助手&#xff1a;5分钟掌握智能学习&#xff0c;告别熬夜刷课 【免费下载链接】WELearnHelper 显示WE Learn随行课堂题目答案&#xff1b;支持班级测试&#xff1b;自动答题&#xff1b;刷时长&#xff1b;基于生成式AI(ChatGPT)的答案生成 项目地址: https://git…...

TSSP77038红外解调器:从原理到实战,打造高可靠接近传感与光束中断系统

1. 项目概述&#xff1a;从“遥控”到“感知”的红外新思路在嵌入式开发和电子制作领域&#xff0c;红外&#xff08;IR&#xff09;技术几乎是每个玩家都会接触到的老朋友。我们最熟悉的莫过于家里的电视、空调遥控器&#xff0c;它们通过发射一串调制在38KHz载波上的红外脉冲…...