LeetCode343:整数拆分

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

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

在这里插入图片描述
代码
动态规划

class Solution {
public:int integerBreak(int n) {/*dp[i]:表示对i进行拆分,得到最大的乘积为dp[i]可以这么理解,j * (i - j) 是单纯的把整数拆分为两个数相乘,而j * dp[i - j]是拆分成两个以及两个以上的个数相乘。递推公式:dp[i] = max(j*(i-j),j*dp[i-j])初始化:dp[0] = 0,dp[1] = 0, dp[2] = 1       */vector<int> dp(n+1);dp[0] = dp[1] = 0;dp[2] = 1;for (int i = 3; i <= n; i++) {for (int j = 1; j < i; j++) {//为什么还要比较dp[i]:在递推公式推导的过程中,每次计算dp[i],取最大的而已。dp[i] = max(max(j * (i - j), j * dp[i - j]), dp[i]);}}return dp[n];}
};

优化
因为拆分一个数n 使之乘积最大,那么一定是拆分成m个近似相同的子数相乘才是最大的。

例如 6 拆成 3 * 3, 10 拆成 3 * 3 * 4。 100的话 也是拆成m个近似数组的子数 相乘才是最大的。

只不过我们不知道m究竟是多少而已,但可以明确的是m一定大于等于2,既然m大于等于2,也就是 最差也应该是拆成两个相同的 可能是最大值。

那么 j 遍历,只需要遍历到 n/2 就可以,后面就没有必要遍历了,一定不是最大值。

class Solution {
public:int integerBreak(int n) {/*dp[i]:表示对i进行拆分,得到最大的乘积为dp[i]可以这么理解,j * (i - j) 是单纯的把整数拆分为两个数相乘,而j * dp[i - j]是拆分成两个以及两个以上的个数相乘。递推公式:dp[i] = max(j*(i-j),j*dp[i-j])初始化:dp[0] = 0,dp[1] = 0, dp[2] = 1*/vector<int> dp(n+1);dp[0] = dp[1] = 0;dp[2] = 1;for (int i = 3; i <= n; i++) {for (int j = 1; j <= i/2; j++) {//为什么还要比较dp[i]:在递推公式推导的过程中,每次计算dp[i],取最大的而已。dp[i] = max(max(j * (i - j), j * dp[i - j]), dp[i]);}}return dp[n];}
};

贪心
拆分尽可能多的3

class Solution {
public:int integerBreak(int n) {if (n == 2) return 1;if (n == 3) return 2;if (n == 4) return 4;int result = 1;while (n > 4) {result *= 3;n -= 3;}result *= n;return result;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/696194.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用 Supabase CLI 进行本地开发环境搭建

文章目录 &#xff08;零&#xff09;前言&#xff08;一&#xff09;Supabase CLI&#xff08;1.1&#xff09;安装 Scoop&#xff08;1.2&#xff09;用 Scoop 安装 Supabase CLI &#xff08;二&#xff09;本地项目环境&#xff08;2.1&#xff09;初始化项目&#xff08;2…

【笔记】EF_PNN获取及运营商名称显示(待完善)

问题背景 当设备无法成功解析EONS(PNN)的值(即SIM卡EF文件内容),则会用次优先级的NITZ去refresh了SPN。(问题代码如下,是通过Phone对象拿到plmn为空) 运营商名称一般显示优先级:Eons > NITZ > XML OPL id 0 对应的是PNN第一条 功能逻辑 (定制)当卡中的spn为空…

【XSRP软件无线电】基于软件无线电平台的QPSK频带通信系统设计

目录&#xff1a; 目录&#xff1a; 一、绪论 1.1 设计背景 1.2 设计目的 二、系统总体方案 2.1 专题调研题目 2.2 调研背景 2.3 设计任务解读 2.4 设计原理 2.4.1 原理框图 2.4.2 功能验证 三、软件设计 3.1 程序解读 3.2 程序设计 3.3 仿真结果&#xff1a; 四、程序代码分析…

【spark RDD】spark 之 Kryo高性能序列化框架

文章目录 一. RDD序列化的原因二. Kryo序列化框架三. spark 配置 kryo 序列化1. 设定kryo序列化2. 注册序列化类&#xff08;非必须&#xff0c;但是强烈建议做&#xff09;3. 配置 spark.kryoserializer.buffer 一. RDD序列化的原因 Spark初始化工作是在Driver端进行的&#…

JAVA智慧工地管理系统源码,智慧工地扬如何实现对工地扬尘的实时监测

智慧工地扬尘监测系统概述 智慧工地扬尘监测系统是一种利用现代信息技术&#xff0c;如光电传感技术和无线传输技术&#xff0c;对工地扬尘污染进行实时监测和管理的高效工具。该系统的目的是为了保护环境&#xff0c;减少因建筑施工产生的扬尘对周边地区的影响&#xff0c;同…

2024生日快乐祝福HTNL源码修复版

源码介绍 2024生日快乐祝福HTNL源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c; 源码截图 源码下载 2024生日快乐祝福HTNL源码

C语言(指针)3

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;关注收藏&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#x…

【pandas】库中的apply(lambda function ,arix)

pandas.apply() 遍历DataFrame的元素&#xff08;一行或者一列数据&#xff09; 行遍历&#xff1a;axis 1 列遍历&#xff1a;axis 0 基础信息 pandas的apply()方法是用来调用一个lambda函数&#xff0c;让函数对数据对象具有批处理的特性。 pandas支持apply()调用…

Docker:docker在项目中常用的一些命令

简介   Docker 是一个开源的容器化平台&#xff0c;它允许开发者将应用程序及其依赖项打包到一个可移植的容器中&#xff0c;并发布到任何安装了 Docker 引擎的机器上。这些容器是轻量级的&#xff0c;包含了应用程序运行所需的所有东西&#xff0c;如代码、系统库、系统工具…

两种方法合并3dtiles(分别使用js/java)

目录 前言&#xff1a; 需合并的json目录 aa/tileset.json bb/tileset.json cc/tileset.json dd/tileset.json ee/tileset.json js源码&#xff1a; 运行命令&#xff1a; 生成结果&#xff1a; java源码&#xff1a; Matrix.java ThreeDTilesJoin2.java pom文件…

YOLOv8+CLIP实现图文特征匹配

本文通过结合YOLOv8s的高效物体检测能力与CLIP的先进图像-文本匹配技术&#xff0c;展示了深度学习在处理和分析复杂多模态数据中的潜力。这种技术的应用不仅限于学术研究&#xff0c;还能广泛应用于工业、商业和日常技术产品中&#xff0c;以实现更智能的人机交互和信息处理。…

管仲发动的粮食战争令人惊醒

各种类型的战争&#xff0c;在中国春秋战国时代就已经包罗万象、炉火纯青了&#xff0c;第一仲父管仲无疑是其中最伟大的军事家之一。 时至今日&#xff0c;他留给人们的最大印象&#xff0c;应该是孔子那句话“微管仲&#xff0c;吾其被发左衽矣。” 也就是说&#xff0c;如果…