| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Java 连续子数组的最大和、动态规划问题 -> 正文阅读 |
|
[数据结构与算法]Java 连续子数组的最大和、动态规划问题 |
题目: {6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和 解题思路首先 状态定义:dp[i]?表示以数组下标为i的数做为结尾的连续子数组的最大和注意是以i为结尾 状态解释:比如说现在有一个数组{6,-3,-2,7,-15,1,2,2},为了方便理解,我们就下标以1开始,dp[3]就是以-2为结尾的,那么显然dp[3]的最大值就是1(6+-3+-2 = 1),dp[4]要以7结尾那么以7结尾的子序列最大和就是8(6+-3+-2+7 = 8。 ? 知道dp[i]是什么后,求dp[i]的时候就有两种可能, ????????第一种:就是像上面的dp[4]一样,dp[3]求出来是1了,再加上自己array[4]是最大的。 ????????第二种:能就是说如果dp[3]我求出来是负数,那如果我也是dp[3]+array[4]大于d[3],这时候dp[3]反而是累赘,最大就是array[4]自己。 具体过程: ? ? ? ? (首先我们定义一个max作为每次比较的临时最大值,再用一个maxest?最为历史最大值) ? ? ? ? 第一步:从第一个数array[0]开始,暂且记录一下这个值为最大值。
? ? ? ? 第二步:将目前最大的值(max)+后面一个值(array[i])和后面这个值(array[i]),进行比较。
????????如果两者之和(max + array[i])更大,将两者之和(max + array[i])进行保留作为临时的最大值。如果这两者之和(max + array[i])小于后面的值,说明这个max对于array[i]来说是这个“累赘”,所以保留array[i]作为临时的最大值。 ? ? ? ? 获得临时最大值max之后,将临时最大值max与历史最大值maxest进行比较,将大的那个作为新的历史最大值maxest。 ? ? ? ?最后得到的maxest即为最大连续子数组的和 完整代码:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 17:35:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |