整数拆分(力扣)动态规划 JAVA

news2024/10/7 6:41:26

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

里程碑意义

解题思路:

1、典型动态规划题型, 即前面所算的的值,对推导新值有铺垫作用

2、设立dp数组dp[i] = x即拆分i可以获得的最大乘积为x

3、初始值dp[2] = 1 * 1 = 1

4、进一步推导

dp[3] = max(dp[2] * 1, 2 * 1)
dp[4] = max(dp[3] * 1,dp[2] * d[2], dp[2] * 2, dp[1] * 3, 2 * 2,  3 * 1)
无非就是拆与不拆

5、再加上一些大胆的猜想不难看出dp[i]可以不拆即(i- j) * j也可以拆即dp[i - j] * dp[j]或者dp[i - j] *j取其中最大值即可

代码:

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

在这里插入图片描述
可以看出时间还是有些许长,仔细分析下面两行代码:

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

可以看出dp[j]是没必要拆开的,如果它要拆开的话完全可以放在dp[i - j]里,也就是说咱们写了一个重复的语句

例如:
dp[6] * dp[4] = 3 * 3 * 2* 2
等效于
dp[8] * 2 = 3 * 3 * 2 * 2

当然也可以这样理解:

对于正整数 i,当 i≥2 时,可以拆分成至少两个正整数的和。令 j 是拆分出的第一个正整数,则剩下的部分是 i−j,i−j 可以不继续拆分,或者继续拆分成至少两个正整数的和。

优化代码:

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

在这里插入图片描述

举一反三拆分dp[j]必然也没有问题

代码:

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/766786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何无代码将AI图像生成接入您的办公系统中,实现业务流程自动化

当设计接到一个需求时&#xff0c;按照常规的工作安排&#xff0c;从对接需求到最后完成效果图最短时间都要在5天左右&#xff0c;如果遇到高要求的客户或领导&#xff0c;后期还需要在电脑上进一步调整细节&#xff0c;一张成片起码要花上数小时时间去完成。 而人工智能的出现…

每天一道大厂SQL题【Day26】脉脉真题实战(二)活跃时长的均值

文章目录 每天一道大厂SQL题【Day26】脉脉真题实战(二)活跃时长的均值每日语录第26题 中级题: 活跃时长的均值1. 需求列表思路分析 答案获取加技术群讨论附表文末SQL小技巧 后记 每天一道大厂SQL题【Day26】脉脉真题实战(二)活跃时长的均值 大家好&#xff0c;我是Maynor。相信…

LRU 算法,但 get 和 put 必须 O(1),用哈希表

https://leetcode.cn/problems/lru-cache/ 题目有key、value的&#xff0c;直接就上map了 结果&#xff1a;&#x1f605; 仔细一看&#xff0c;原来要 get 和 put 必须 O(1) 只能抛弃树型数据结构了 线性的数据结构也可以吧&#xff0c;如果可以构造出一个队列&#xff0c…

[ 容器 ] Docker 基本管理

目录 一、Docker 概述1.1 Docker 是什么&#xff1f;1.2 Docker 的宗旨1.3 容器的优点1.4 Docker 与 虚拟机的区别1.5 容器在内核中支持的两种技术namespace的六大类型 二、Docker核心概念2.1 镜像2.2 容器2.3 仓库 总结 一、Docker 概述 1.1 Docker 是什么&#xff1f; 是一…

OpenCV for Python 学习第三天 :图片处理之NumPy库与OpenCV相结合

上一篇博客我们了解了图像在OpenCV中的保存方式。并且我们自己上手创建了一张灰度图像和一张彩色图像。除此之外&#xff0c;我们还了解到了彩色图像通道在OpenCV中和我们日常所了解的不一样&#xff0c;是通过BGR的顺序进行编码的。咱们一定要记清楚哦~ 那么今天&#xff0c;我…

STL好难(8):map和set

目录 1.一些概念的理解 &#x1f349;关联式容器和序列式容器 &#x1f349;key模型、key/value模型 &#x1f349;树形结构关联式容器 2.set的介绍 &#x1f349;set文档 &#x1f349;set的使用 &#x1f352;set的模板参数列表 &#x1f352;set的构造 &#x1f3…

【TiDB理论知识 05】TiKV-Raft协议

目录 一 概念 二 raft共识算法对于TiKV的几个重要功能 1 Raft日志复制 1 Raft日志复制流程 2 名词解释 分层次理解TIKV 2 Raft Leader选举 集群初始状态时Leader选举流程 数据正在复制时Leader选举流程 初始化时的特殊情况 raft 参数与Tidb 参数对应关系 一 概念 le…

SpringCloud系列(十六)[分布式搜索引擎篇] - DSL 查询及相关性算分的学习 (部分)

在SpringCloud系列&#xff08;十五&#xff09;[分布式搜索引擎篇] - 结合实际应用场景学习并使用 RestClient 客户端 API这篇文章中我们已经对 RestClient 有了初步的了解, 并且已经将一些数据进行了存储, 但是这并不是我们学习 ElasticSearch 的目的, ElasticSearch 最擅长的…

Java8之Stream流

目录 简介 特点 Stream操作步骤 创建 中间操作 筛选与切片 filter(Predicate p) distinct() limit(long maxSize) skip(long n) 映射 map(Function f) flatMap(Function f) 排序 自然排序 定制排序 终止操作 匹配与查找 归约 收集 好处 不足 简介 在编写…

css基本样式的使用

1、高度和宽度 .c1{height: 300px;width: 500px; }注意事项&#xff1a; 宽度&#xff0c;支持百分比行内标签&#xff0c;默认无效块级标签&#xff0c;默认有效&#xff08;即使右侧空白&#xff0c;也不给你占用&#xff09; 块级和行内标签 css样式 标签&#xff1a; di…

echarts 地图点击常见问题

echats 散点图不支持缩放 echarts 地图点击激活label如何去除 高德loca 1.4版本热力图报错 绘制的颜色区间是 0 --1 高德地图销毁不生效 自己傻逼&#xff0c;每次没有清空数组导致叠加数据&#xff0c;约点数据越多。 为何用高德地图district.search查询不到别的省数据&…

【SpringBoot】SpringBoot的创建和运行

1.什么是SpringBoot&#xff1f; Spring 的诞⽣是为了简化 Java 程序的开发的&#xff0c;⽽ Spring Boot 的诞⽣是为了简化 Spring 程序开发 的。 Spring Boot是由Pivotal团队提供的基于Spring的框架&#xff0c;该框架使用了特定的方式来进行配置&#xff0c;从而使开发…

洗鞋小程序开发

上门洗鞋小程序为用户提供了便捷、高效的鞋子洗护服务。通过手机即可预约上门取送鞋子&#xff0c;省时省力&#xff0c;让鞋子焕然一新。下面我们来看看这个小程序的具体功能介绍。 1. 预约取送服务&#xff1a;用户可以在上门洗鞋小程序中选择合适的时间和地点&#xff0c;预…

访问学者面试申请如何应对?

作为一个学者面试申请者&#xff0c;面对这一重要机会&#xff0c;我们需要认真准备并采取适当的应对策略。下面知识人网小编将提供一些建议&#xff0c;帮助你在面试中取得良好的表现。 首先&#xff0c;在准备阶段&#xff0c;你应该研究并了解申请机构的背景和研究方向。了解…

阻止冒泡 大盒子套小盒子 点击大盒子跳转页面 小盒子不跳转

比如论坛点赞功能 点击这篇帖子跳到论坛详情页面,但是点赞不跳转 <view click.stop"onSmallBoxClick"><!-- 点赞 --> </view>methods: {onSmallBoxClick() {// 点赞逻辑 } } 大盒子 帖子div <view click"g…

pdf合并一页怎么合并?这几种合并方法看看

pdf合并一页怎么合并&#xff1f;PDF文件是一种非常常见的文件格式&#xff0c;它可以在不同的操作系统和设备之间方便地进行共享。有时候&#xff0c;我们需要将多个PDF文件合并成一个文件。例如&#xff0c;当我们需要将多个文档合并成一个大文档时&#xff0c;或者我们需要将…

Redis数据类型与常用命令

文章目录 前言一、Redis数据类型1. Redis数据类型简介2. Redis数据类型特点 二、Redis常用命令1. 字符串string 操作命令2. 哈希hash 操作命令3. 列表list 操作命令4. 集合set操作命令5. 有序集合 sorted set 操作命令6. 通用命令 总结 前言 为了巩固所学的知识&#xff0c;作…

TRT3-trt-basic - 6 Int8的量化

int8量化是利用int8乘法替换float32乘法实现性能加速的一种方法 对于常规模型有&#xff1a;y kx b&#xff0c;此时x、k、b都是float32, 对于kx的计算使用float32的乘法 对于int8模型有&#xff1a;y tofp32(toint8(k) * toint8(x)) b&#xff0c;其中int8 * int8结果为in…

win7,win10下删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\报错

在调试虚拟网卡驱动时&#xff0c;由于修改错误&#xff0c;导致枚举顺序错乱&#xff0c;因此通过删除HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\WINTUN下的所有项&#xff0c;即可&#xff0c;win10可用。 1、下载PStools&#xff1a; http://technet.microsoft.c…

130、仿真-基于51单片机智能窗户温湿度电机控制仿真设计(Proteus仿真+程序+配套资料等)

方案选择 单片机的选择 方案一&#xff1a;STM32系列单片机控制&#xff0c;该型号单片机为LQFP44封装&#xff0c;内部资源足够用于本次设计。STM32F103系列芯片最高工作频率可达72MHZ&#xff0c;在存储器的01等等待周期仿真时可达到1.25Mip/MHZ(Dhrystone2.1)。内部128k字节…