【陪伴式刷题】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 是整个数组的元素和的一半
相关推荐
xixixiLucky17 分钟前
IDEA中MAVEN项目找依赖的快捷插件
java·maven·intellij-idea
嘻嘻嘻开心21 分钟前
Java IO流
java·开发语言
梭七y33 分钟前
【力扣hot100题】(103)移动零
数据结构·算法·leetcode
JIngJaneIL41 分钟前
基于java+ vue家庭理财管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
老华带你飞1 小时前
电商系统|基于java + vue电商系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
菠菠萝宝1 小时前
从传统后端到AI智能驱动:Java + AI 生态深度实战技术总结
java·人工智能·ai·llm·知识图谱·ai编程·rag
陈佳梁1 小时前
java--对象的引用
java·开发语言
wadesir1 小时前
Java实现遗传算法(从零开始掌握智能优化算法)
java·开发语言·算法
Jeremy爱编码1 小时前
leetcode热题腐烂的橘子
算法·leetcode·职场和发展
程序媛徐师姐2 小时前
Java基于SpringBoot的智能城市管理平台,附源码+文档说明
java·spring boot·java springboot·智能城市管理平台·java智能城市管理平台·java智能城市管理·智能城市管理