【陪伴式刷题】Day 37|动态规划|416.整数拆分(Integer Break)

刷题顺序按照代码随想录建议

题目描述

英文版描述

Given an integer n, break it into the sum of k positive integers , where k >= 2, and maximize the product of those integers.

Return the maximum product you can get.

Example 1:

Input: n = 2 Output: 1 Explanation: 2 = 1 + 1, 1 × 1 = 1.

Example 2:

Input: n = 10 Output: 36 Explanation: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36.

Constraints:

  • 2 <= n <= 58

英文版地址

leetcode.com/problems/in...

中文版描述

给定一个正整数 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

中文版地址

leetcode.cn/problems/in...

解题方法

动态规划

java 复制代码
class Solution {
    public boolean canPartition(int[] nums) {
        int sum = 0;
        for (int num : nums) {
            sum += num;
        }
        if (sum % 2 != 0) {
            return false;
        }
        int bagSize = sum / 2;
        // dp[row][col] row表示从[0,1]区间上挑选一些整数(每个最多一次)总和等于col   [14,9,8,4,3,2]
        int[][] dp = new int[nums.length][bagSize + 1];
        // 先填一行
        for (int i = 0; i < bagSize + 1; i++) {
            if (i >= nums[0]) {
                dp[0][i] = nums[0];
            }
        }

        for (int row = 1; row < nums.length; row++) {
            for (int col = 0; col < bagSize + 1; col++) {
                if (col < nums[row]) {
                    dp[row][col] = dp[row - 1][col];
                } else {
                    dp[row][col] = Math.max(dp[row - 1][col], dp[row - 1][col - nums[row]] + nums[row]);
                }

            }
        }
        if (dp[nums.length - 1][bagSize] == bagSize) {
            return true;
        }
        return false;
    }
}

复杂度分析

  • 时间复杂度:O(n^2),其中n是数组长度
  • 空间复杂度:O(n*target),其中n是数组长度,target 是整个数组的元素和的一半
相关推荐
丶小鱼丶5 分钟前
链表算法之【合并两个有序链表】
java·算法·链表
张先shen33 分钟前
Elasticsearch RESTful API入门:全文搜索实战(Java版)
java·大数据·elasticsearch·搜索引擎·全文检索·restful
天河归来1 小时前
springboot框架redis开启管道批量写入数据
java·spring boot·redis
张先shen2 小时前
Elasticsearch RESTful API入门:全文搜索实战
java·大数据·elasticsearch·搜索引擎·全文检索·restful
codervibe2 小时前
如何用 Spring Security 构建无状态权限控制系统(含角色菜单控制)
java·后端
codervibe2 小时前
项目中如何用策略模式实现多角色登录解耦?(附实战代码)
java·后端
TCChzp2 小时前
synchronized全链路解析:从字节码到JVM内核的锁实现与升级策略
java·jvm
大葱白菜2 小时前
🧩 Java 枚举详解:从基础到实战,掌握类型安全与优雅设计
java·程序员
笑衬人心。2 小时前
在 Mac 上安装 Java 和 IntelliJ IDEA(完整笔记)
java·macos·intellij-idea
SimonKing2 小时前
颠覆传统IO:零拷贝技术如何重塑Java高性能编程?
java·后端·程序员