zoukankan      html  css  js  c++  java
  • 343. 整数拆分(同剑指 Offer 14- I. 剪绳子)

    题目

    剑指 Offer 14- I. 剪绳子

    我的思路

    我有两种思路,首先是数学方法,证明拆分成尽量多的3和2乘积最大即可。时间复杂度1

    第二是动态规划,每个整数拆分的最大乘积可以由小于它的整数拆分最大乘积决定,状态转移方程m[n]=max{m[i]*m[n-i]}, 1<i<m-1。时间复杂度n^2

    上面两种方法的具体实现见https://www.cnblogs.com/BoysCryToo/p/13396393.html

    下面阐述一下官方题解中的被优化的动态规划方法:

    其实是对上面状态转移方程的优化,证明了当i>=4时,不可能成绩更大所以只讨论i=2和i=3的情况。由此

    复杂度On。

    我的实现

    class Solution {
    public:
        int integerBreak(int n) {
            if (n < 4) {
                return n - 1;
            }
            vector <int> dp(n + 1);
            dp[2] = 1;
            for (int i = 3; i <= n; i++) {
                dp[i] = max(max(2 * (i - 2), 2 * dp[i - 2]), max(3 * (i - 3), 3 * dp[i - 3]));
            }
            return dp[n];
        }
    };

    拓展学习

  • 相关阅读:
    软考
    码云
    vue和bpmnjs
    工作流引擎
    net core restapi
    工厂模式
    sqlmanage
    类的扩展
    导出excel
    拼图
  • 原文地址:https://www.cnblogs.com/BoysCryToo/p/13402570.html
Copyright © 2011-2022 走看看