IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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]开始,暂且记录一下这个值为最大值。

int max = array[0];
int maxest = array[0];

? ? ? ? 第二步:将目前最大的值(max)+后面一个值(array[i])和后面这个值(array[i]),进行比较。

for (int i = 1; i < array.length; i++) {
     max = Math.max(max + array[i], array[i]);
     maxest= Math.max(maxest, max);
}

????????如果两者之和(max + array[i])更大,将两者之和(max + array[i])进行保留作为临时的最大值。如果这两者之和(max + array[i])小于后面的值,说明这个max对于array[i]来说是这个“累赘”,所以保留array[i]作为临时的最大值。

? ? ? ? 获得临时最大值max之后,将临时最大值max与历史最大值maxest进行比较,将大的那个作为新的历史最大值maxest。

? ? ? ?最后得到的maxest即为最大连续子数组的和

完整代码:


public class getMax {
    public int getMaxArray(int[] array) {
        //max作为临时最大值
        int max = array[0];
        //maxest作为历史最大值
        int maxest= array[0];
        for (int i = 1; i < array.length; i++) {
            max = Math.max(max + array[i], array[i]);
            maxest= Math.max(maxest, max);
        }
        return maxest;
    }
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 11:53:53  更:2021-07-29 11:56:59 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码