Java中等题-整数拆分(力扣)

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

这道题我没有思路,看了官方解题思路之后,梳理如下:

用一个数组dp[i]表示i能被拆分出的乘积最大的整数,

一个数n,可以被拆为j和n-j, n-j可以选择不拆开和拆开

n=Math.max(j*(n-j),j*dp[n-j]);

j的范围在1~n-1

java 复制代码
class Solution {
    public int integerBreak(int n) {

        if(n<2){
            return 0;
        }
        int dp[]=new int[n+1];
        dp[0]=0;
        dp[1]=0;

       for(int i=2;i<n+1;i++){
           for(int j=1;j<i;j++){
               dp[i]=Math.max(dp[i],Math.max((i-j)*j,j*dp[i-j]));
           }
       }
       return dp[n];

    }
}
相关推荐
没有bug.的程序员3 分钟前
分布式链路追踪:微服务可观测性的核心支柱
java·分布式·微服务·架构·wpf
清风wxy6 分钟前
C语言基础数组作业(冒泡算法)
c语言·开发语言·数据结构·c++·windows·算法
我是华为OD~HR~栗栗呀6 分钟前
华为OD-21届考研-Java面经
java·前端·c++·python·华为od·华为·面试
IT小番茄6 分钟前
Kubernetes云平台管理实战:如何创建Deployment更好(九)
算法
凤山老林8 分钟前
SpringBoot 启动时执行某些操作的 8 种方式
java·开发语言·spring boot·后端
白云千载尽23 分钟前
leetcode 2598 执行操作后最大MEX
算法·leetcode·职场和发展
狼爷24 分钟前
Java 开发必看:UUIDv7 终于标准化了!这次真香🔥(基于 uuid-creator 实战)
java
岁月向前31 分钟前
网络数据大端序和小端序
算法
努力搬砖的咸鱼1 小时前
Node.js 和 Java 项目怎么写 Dockerfile
java·开发语言·docker·云原生·容器·node.js
阿无,1 小时前
Java设计模式之装饰者模式
java·开发语言·设计模式