【陪伴式刷题】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 是整个数组的元素和的一半
相关推荐
SHUIPING_YANG7 分钟前
根据用户id自动切换表查询
java·服务器·数据库
Norvyn_710 分钟前
LeetCode|Day18|20. 有效的括号|Python刷题笔记
笔记·python·leetcode
爱吃烤鸡翅的酸菜鱼20 分钟前
IDEA高效开发:Database Navigator插件安装与核心使用指南
java·开发语言·数据库·编辑器·intellij-idea·database
惊涛骇浪、26 分钟前
SpringMVC + Tomcat10
java·tomcat·springmvc
呆呆的小鳄鱼38 分钟前
leetcode:冗余连接 II[并查集检查环][节点入度]
算法·leetcode·职场和发展
墨染点香39 分钟前
LeetCode Hot100【6. Z 字形变换】
java·算法·leetcode
沧澜sincerely39 分钟前
排序【各种题型+对应LeetCode习题练习】
算法·leetcode·排序算法
CQ_071240 分钟前
自学力扣:最长连续序列
数据结构·算法·leetcode
ldj20201 小时前
SpringBoot为什么使用new RuntimeException() 来获取调用栈?
java·spring boot·后端
超龄超能程序猿1 小时前
Spring 应用中 Swagger 2.0 迁移 OpenAPI 3.0 详解:配置、注解与实践
java·spring boot·后端·spring·spring cloud