【动态规划】【数学方法】Leetcode 343. 整数拆分

【动态规划】【数学方法】Leetcode 343. 整数拆分

    • 解法 动态规划
    • 解法 数学 每次拆成n个3,如果剩下是4,则保留4,然后相乘

---------------🎈🎈343. 整数拆分 题目链接🎈🎈-------------------

解法 动态规划

😒: 我的代码实现============>

动规五部曲

✒️确定dp数组以及下标的含义

dp[i] 就是当前数字拆分后得到的最大乘积

✒️确定递推公式⭐️

⭐️拆分出一个数 j 来。理解 j 是拆分 i 的第一个整数
dp[i]最大乘积可以由 拆分的两个数 j 和(i-j)相乘得到
dp[i]最大乘积也可以由 拆分的三个或以上数 j 和 dp[i-j]相乘得到
递推公式:dp[i] = max({dp[i], j × (i-j), j × dp[i-j] })

✒️dp数组初始化

dp[0] dp[1]无法拆分,所以没意义
dp[2] = 1,后面递推从3开始即可

✒️确定遍历顺序

dp[i] 是依靠 dp[i - j]的状态,所以遍历i一定是从前向后遍历,先有dp[i - j]再有dp[i]。

✒️举例推导dp数组

在这里插入图片描述

时间复杂度O(N^2)
空间复杂度O(N)

📘代码

class Solution {
    public int integerBreak(int n) {
        // dp[i] 表示将数字i拆分后得到的最大乘积
        int[] dp = new int[n+1];

        // dp初始化 dp[0]dp[1]无意义
        dp[2] = 1;

        //从dp[3] 开始顺序遍历
        // dp[i] 可以拆成两个: j×(i-j)
        // dp[i] 也可以拆成三个或三个以上:j×dp[i-j]
        // 递推表达式dp[i] = max( j×(i-j), j×dp[i-j], dp[i])
        for(int i = 3; i <= n; i++){
            for(int j = 1; j < i; j++){ // j就是拆出来的数
                dp[i] = Math.max( Math.max(j*(i-j), j*dp[i-j]), dp[i] );  //先取拆两个/拆三个的最大值,再和当前拆分情况取max
            } 
        }
        return dp[n];  
    }
}  

解法 数学 每次拆成n个3,如果剩下是4,则保留4,然后相乘

😒: 我的代码实现============>
拆分一个数使其得到的乘积最大:
⭐️竟可能拆出来最多的3!!!
剩下的余数:
如果是0,那最好
如果是1,那就类比4的最大应该是2×2,那么就不用采用这个3,采用4
如果是2,那就类比5的最大应该是3×2,就采用这个3,再×2即可

时间复杂度O(N)
空间复杂度O(1)

📘代码

class Solution {
    public int integerBreak(int n) {
        if(n == 2) return 1;
        if(n == 3) return 2;
        if(n == 4) return 4;
        int result = 1;
        while(n > 4){
            result *= 3;
            n -=3; // 拆3拆3
        }
        result =  result*n;
        return result;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

创建多节点 k8s 集群

主机IP系统master192.168.2.15ubuntu20.04 x64 2C 4GWorker1192.168.2.16ubuntu20.04 x64 2C 4GWorker1192.168.2.18ubuntu20.04 x64 2C 4G 使用 iterm2 连接四台服务器 command shift i 同时操作 初始化配置 关闭防火墙 systemctl stop firewalld systemctl disable firewa…

【学习】软件测试中,我们如何有效地跟踪和管理缺陷?

在软件测试中&#xff0c;如何有效地跟踪和管理缺陷&#xff1f;别急&#xff0c;一起来看下小编今日带来的分享。 1.缺陷报告 建立一个缺陷报告系统&#xff0c;让用户和团队成员能够提交缺陷报告。确保缺陷报告中包括清晰的问题描述、重现步骤、预期结果和实际结果等信息。2…

数组的概述

数组的概述 为什么需要数组 需求分析1&#xff1a; 需要统计某公司50个员工的工资情况&#xff0c;例如计算平均工资、找到最高工资等。用之前知识&#xff0c;首先需要声明50个变量来分别记录每位员工的工资&#xff0c;这样会很麻烦。因此我们可以将所有的数据全部存储到一…

java使用阿里巴巴oss

一 .准备 进入阿里 进入控制台 创建bucket 新建目录 点击AccessKey管理 创建AccessKey并复制下载key值 二.使用 导入阿里巴巴和spring依赖 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version&…

进程管理命令

进程的概念 进程:运行中的程序(过程,动态) 程序:存储在磁盘上的二进制可执行文件;(静态) 操作系统是通过管理进程,让进程运行来完成用户的任务的; PCB:进程控制块,记录的是进程的相关属性信息;PID:是操作系统对进程的标识;唯一的; 简而言之, 程序:指令数据; 进程:运行中的程序…

Linux:进程概念认识

进程 基本概念 课本概念&#xff1a;程序的一个执行实例&#xff0c;正在执行的程序等 内核观点&#xff1a;担当分配系统资源&#xff08; CPU 时间&#xff0c;内存&#xff09;的实体。 描述进程 -PCB 进程信息被放在一个叫做进程控制块的数据结构中&#xff0c;可以理解为…

前端必会的一些基础

1、如何把obj对象 添加到arr数组对象内 2、手机号、邮箱、隐藏用户手机号中间四位正则 3、两个数组 数组a未全部人员 数组b为已选中人员 默认选中 4、数组去重、 5、localStorage 存取 数组 方法 6、数据filter过滤 7、请求接口时header 请求格式不对 需要怎么转换&#xf…

缺省和重载——初识c++

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 C输入&输出cout 和cin<<>> 缺省参数全缺省半缺省应用场景声明和定义分离的情况 函数重载1.参数的类型不同2.参数的个数不同3.参数的顺…

C++运算符重载中的引用返回

文章目录 引言原因1.为了支持链式调用2.避免不必要的对象创建和复制3.保持语义一致性 引言 在C编程语言中&#xff0c;运算符重载是一项强大的特性&#xff0c;它允许程序员为自定义类型重新定义或重载已有的运算符&#xff0c;从而使得这些类型能够像内置类型一样使用运算符。…

数学建模之MATLAB使用

1.数值计算和符号计算的认识 我们都知道MATLAB里面存在着数值计算和符号计算&#xff0c;但是两者之间到底是怎样的呢&#xff1f; 举一个很简单的例子&#xff0c;我们在高等数学里面的微积分学习时经常求不定积分&#xff0c;也就是原函数&#xff0c;这个过程实际上进行的…

javaWeb学生宿舍管理系统

一、摘要 本博客介绍了如何使用Spring Boot和MySQL构建一个功能完善的JavaWeb学生宿舍管理系统。该系统分为三个角色&#xff1a;管理员、宿管和学生。管理员拥有对整个系统的全面管理权限&#xff0c;包括学生管理、宿舍管理、入住管理和管理员管理&#xff1b;宿管负责宿舍的…

高级 IO

1、五种IO模型 阻塞IO: 在内核将数据准备好之前, 系统调用会一直等待. 所有的套接字, 默认都是阻塞方式&#xff1b; 阻塞IO是最常见的IO模型&#xff1b; 非阻塞IO: 如果内核还未将数据准备好, 系统调用仍然会直接返回, 并且返回EWOULDBLOCK错误码&#xff1b; 非阻塞IO往往…

QMT量化交易上手

文章目录 QMT介绍基本使用代码初始化股票和行情交易量化策略示例相关链接QMT介绍 QMT是迅投公司出品量化交易客户端软件,目前只能运行在windows机器上,分为QMT 和 miniQMT两种模式,后者可以采用python API做程序化交易,极大方便了广大散户。这点上比同花顺/通信达好很多。…

Filter、Listener、AJAX

Filter 概念&#xff1a;Filter 表示过滤器&#xff0c;是JavaWeb三大组件(Servlet、Filter、 Listener)之一。 过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。 过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;权限控制、统一编码处理、敏感…

百度谷歌301强引蜘蛛池效果怎么样

301强引蜘蛛池效果怎么样 本文 虚良SEO 原创&#xff0c;转载保留链接&#xff01;网址&#xff1a;百度谷歌301强引蜘蛛池效果怎么样 - 虚良SEO 随着搜索引擎优化&#xff08;SEO&#xff09;技术的发展&#xff0c;越来越多的网站开始采用蜘蛛池技术来提高网站的排名和流量。…

电脑如何一键修复所有dll缺失,几种修复dll文件丢失的方法

修复所有DLL&#xff08;动态链接库&#xff09;文件缺失的问题通常不可能通过单一的"一键修复"按钮来实现&#xff0c;因为DLL文件缺失可能由各种不同的原因导致&#xff0c;比如应用程序安装不正确、病毒感染、或系统文件损坏等。 使用内置的系统文件检查器&#x…

科东软件鸿道IntewellV2.3.2版本发布说明

一、软件发布版本信息 版本号&#xff1a;V2.3.2版本发布类型&#xff1a;beta受限版本 二、版本特点 1.合并分支代码 2.RTOS支持X86 64位 三、运行环境推荐 Intewell developer可以运行在windows7及windows10 64位 四、支持硬件列表

覃超老师 算法面试通关40讲

教程介绍 无论是阿里巴巴、腾讯、百度这些国内一线互联网企业&#xff0c;还是 Google、Facebook、Airbnb 等硅谷知名互联网公司&#xff0c;在招聘工程师的过程中&#xff0c;对算法和数据结构能力的考察都是重中之重。本课程以帮助求职者在短时间内掌握面试中最常见的算法与…

软件测试工程师这样面试,90%能拿到offer

如果大家有关注一些测试类的文章的话&#xff0c;肯定会发现很多人都在表示今年行业受到疫情的影响&#xff0c;工作很难找&#xff0c;那情况真的是如此么?你只是不知道面试官的意图是什么&#xff0c;不知道他考察你的点在哪里。只要弄明白面试中的一些固有套路&#xff0c;…

离线linux服务器安装mysql8

本文的服务器环境&#xff1a;openEuler毛坯版的&#xff0c;很多常用的指令都没有预装&#xff0c;比如rpm、tar等等&#xff0c;没有网络坏境&#xff0c;需要自己手动配置本地yum仓库&#xff0c;安装相关指令 1、检查服务器是否已经安装了MySQL 1.1、查询mysql以安装的相关…