【陪伴式刷题】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 是整个数组的元素和的一半
相关推荐
luoluoal18 分钟前
java项目之企业级工位管理系统源码(springboot)
java·开发语言·spring boot
ch_s_t19 分钟前
新峰商城之购物车(一)
java·开发语言
蜜桃小阿雯25 分钟前
JAVA开源项目 校园美食分享平台 计算机毕业设计
java·jvm·spring boot·spring cloud·intellij-idea·美食
黄昏_28 分钟前
苍穹外卖Day01-2
java·spring
努力的八爪鱼40 分钟前
记录工作中遇到的问题(持续更新~)
java
求学小火龙42 分钟前
ElasticSearch介绍+使用
java·大数据·elasticsearch
mikey棒棒棒43 分钟前
算法练习题25——合并多项式
java·算法·hashmap·哈希·多项式
kimloner1 小时前
工厂模式(二):工厂方法模式
java·设计模式·工厂方法模式
月临水1 小时前
JavaEE:网络编程(UDP)
java·网络·udp·java-ee
Deryck_德瑞克1 小时前
Java集合笔记
java·开发语言·笔记