力扣343 整数拆分

题目

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

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

动态规划

定义:dp[i]表示将数字i拆分为至少两个正整数的和时,能得到的最大乘积

dp[i]的定义贯穿整个解题过程,后续所有推导都围绕如何通过更小的子问题求解dp[i]

对于每一个正整数i,第一步先把它拆分成i和i-j,此时的乘积为j*(i-j)

对于i-j来说,所有可能的拆分里,乘积最大的是max(j*(i-j),j*dp(i-j))

j是从1开始遍历,拆分j的情况,在遍历j的过程中其实都计算过了

代码

cpp 复制代码
class Solution {
public:
    int integerBreak(int n) {
        vector<int> dp(n+1);
        dp[2]=1;
        for(int i=3;i<=n;i++){
            for(int j=1;j<=i/2;j++){
                dp[i]=max(dp[i],max(j*(i-j),j*dp[i-j]));
            }
        }
        return dp[n];
    }
};

参考文章

343. 整数拆分 - 力扣(LeetCode)https://leetcode.cn/problems/integer-break/代码随想录https://www.programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE

相关推荐
SKYDROID云卓小助手27 分钟前
无人设备遥控器之多设备协同技术篇
网络·人工智能·嵌入式硬件·算法·信号处理
熬了夜的程序员1 小时前
【华为机试】34. 在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·华为od·华为·面试·golang
phltxy1 小时前
ArrayList与顺序表
java·算法
草莓熊Lotso2 小时前
【数据结构初阶】--排序(一):直接插入排序,希尔排序
c语言·数据结构·经验分享·其他·排序算法
小拇指~2 小时前
梯度下降的基本原理
人工智能·算法·计算机视觉
小徐不徐说2 小时前
C++ 模板与 STL 基础入门:从泛型编程到实战工具集
开发语言·数据结构·c++·qt·面试
艾莉丝努力练剑2 小时前
【C/C++】类和对象(上):(一)类和结构体,命名规范——两大规范,新的作用域——类域
java·c语言·开发语言·c++·学习·算法
TDengine (老段)3 小时前
TDengine 中 TDgp 中添加机器学习模型
大数据·数据库·算法·机器学习·数据分析·时序数据库·tdengine
Tisfy4 小时前
LeetCode 2411.按位或最大的最小子数组长度:一次倒序遍历
数据结构·算法·leetcode·题解·位运算·遍历