【算法与数据结构】343、LeetCode整数拆分

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解

一、题目

在这里插入图片描述

二、解法

  思路分析:博主做这道题的时候一直在思考,如何找到 k k k个正整数, k k k究竟为多少合适。从数学的逻辑上来说,将 n n n均分为 k k k个数之后, k k k个数的乘积为最大(类似于相同周长下,正方形的面积大于长方形,严格的数学证明不深究了)。本题如果用动态规划的方式,令 d p [ i ] dp[i] dp[i]表示为最大的整数乘积,那么一定可以找到一个 d p [ i − j ] dp[i-j] dp[ij],使得 d p [ i − j ] ∗ j dp[i-j]*j dp[ij]j最大,并赋值给 d p [ i ] dp[i] dp[i]。而 d p [ i − j ] dp[i-j] dp[ij]又可以进行类似操作,那么可以一直追溯到 d p [ 0 ] , d p [ 1 ] , d p [ 2 ] dp[0],dp[1],dp[2] dp[0],dp[1],dp[2]。当然,本题当中 d p [ 0 ] , d p [ 1 ] dp[0],dp[1] dp[0],dp[1]没有意义, d p [ 2 ] = 1 dp[2]=1 dp[2]=1。除了 d p [ i − j ] ∗ j dp[i-j]*j dp[ij]j可以得到 d p [ i ] dp[i] dp[i]以外, ( i − j ) ∗ j (i-j)*j (ij)j也可以得到 d p [ i ] dp[i] dp[i],然后我们在每次递归的过程中比较上次的 d p [ i ] dp[i] dp[i]找到最大值。因此, d p [ i ] = m a x ( d p [ i ] , m a x ( d p [ i − j ] ∗ j , ( i − j ) ∗ j ) ) dp[i]=max(dp[i], max(dp[i-j]*j, (i-j)*j)) dp[i]=max(dp[i],max(dp[ij]j,(ij)j))。同时,因为0和1没有意义, i i i从3开始循环,到 n n n j j j只要循环到 i / 2 i/2 i/2即可。
  程序如下

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((i - j) * j, dp[i - j] * j));
            }
        }
        return dp[n];
    }
};

复杂度分析:

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度: O ( n ) O(n) O(n)

三、完整代码

# include <iostream>
# include <vector>
using namespace std;

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((i - j) * j, dp[i - j] * j));
            }
        }
        return dp[n];
    }
};

int main() {
   
	Solution s1;
	int n = 10;
	int result = s1.integerBreak(n);
	cout << result << endl;
	system("pause");
	return 0;
}

end

相关推荐

  1. leetcode 343.整数

    2024-01-21 00:40:02       15 阅读
  2. LeetCode 343. 整数

    2024-01-21 00:40:02       10 阅读
  3. 343. 整数(力扣LeetCode

    2024-01-21 00:40:02       16 阅读
  4. LC343. 整数

    2024-01-21 00:40:02       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-21 00:40:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-21 00:40:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-21 00:40:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-21 00:40:02       18 阅读

热门阅读

  1. 【力扣刷题练习】103. 二叉树的锯齿形层序遍历

    2024-01-21 00:40:02       42 阅读
  2. Webpack5入门到原理3:基本配置

    2024-01-21 00:40:02       35 阅读
  3. python期末:常见模块的使用及计算生态

    2024-01-21 00:40:02       31 阅读
  4. 导出zoedepth的onnx模型并基于gradio实现在线部署

    2024-01-21 00:40:02       41 阅读
  5. Spring MVC学习之——上传文件

    2024-01-21 00:40:02       42 阅读
  6. 力扣54. 螺旋矩阵

    2024-01-21 00:40:02       40 阅读
  7. logback日志记录器

    2024-01-21 00:40:02       32 阅读
  8. C# 十大排序算法

    2024-01-21 00:40:02       28 阅读
  9. 第二章 变量与基本类型(上)

    2024-01-21 00:40:02       25 阅读
  10. 在vue中如何优雅的封装第三方组件

    2024-01-21 00:40:02       44 阅读