文档章节

[LeetCode] 最大连续子序列和或者乘积,以及最长连续子串

Finley.Hamilton
 Finley.Hamilton
发布于 2014/11/08 09:39
字数 491
阅读 691
收藏 5

#题目

Find the contiguous subarray within an array (containing at least one number) which has the largest product. For example, given the array [2,3,-2,4], the contiguous subarray [2,3] has the largest product = 6.

思路

其实不管是最大连续自序列和还是乘积,关键的一个概念是定义一个变量叫做 “包含当前值的最大连续序列值(和/乘积)”,举例来说curMax

这个值的存在使得包含下一个位置的最大连续序列值的求解成为可能,以最大连续自序列求和为例,

curMax(x+1) = max(A[x+1], curMax(x) + A[X])

对于最大连续自序列乘积,需要纪录两个,一个是包含当前值的最大连续子序列乘积, 一个是包含当前值的最小自序列乘积

curMax(x + 1) = Math.max(curMax(x)*A[x], curMin(x)*A[x], A[x]) curMin(x + 1) = Math.min(curMax(x)*A[x], curMin(x)*A[x], A[x])

因为包含当前值的最大值(最小值)只能由这三种可能构成

代码

最大连续自序列和

public class Solution {
    public int maxSubArray(int[] A) {
        int curMax = A[0];
        int max = A[0];
        for (int i = 1; i < A.length ; i++) {
            curMax = Math.max(A[i], curMax + A[i]);
            max = Math.max(max, curMax);
        }
        return max;
    }
}

最大连续子序列乘积

public class MaxProductSubArray {

    public int maxProduct(int[] A) {
        int curMax = A[0];
        int curMin = A[0];
        int max = A[0];

        for(int i = 1; i < A.length; i++) {
            // 注意这里先存起来,下面要在更新之后再用一次
            int temp = curMax * A[i];
            curMax = Math.max(A[i], Math.max(curMax * A[i], curMin * A[i]));
            curMin = Math.min(A[i], Math.min(temp, curMin * A[i]));
            max = Math.max(curMax, max);
        }

        return max;
    }
}

最长连续子串的想法

d[i][j]表示A[0...i],B[0...j],并且以A[i]和B[j]结尾的最长公共连续子串的长度

d[i][j] = d[i-1][j-1] if A[i] == B[j] d[i][j] = 0 if A[i] != B[j]

© 著作权归作者所有

上一篇: Spring with WebSocket
下一篇: http头
Finley.Hamilton

Finley.Hamilton

粉丝 5
博文 45
码字总数 15431
作品 0
广州
私信 提问
加载中

评论(2)

Finley.Hamilton
Finley.Hamilton

引用来自“liqiang1226”的评论

没看太明白,是dp吗?
严格来说可以算DP,但是事实上下一个结果可以由前一个结果直接得出而不需要援引更多之前结果
liqiang1226
liqiang1226
没看太明白,是dp吗?
算法与数据结构(二):动态规划(DP)总结

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dbyfreedom https://blog.csdn.net/Dbyfreedom/article/details/89388883 1. 最长公共子序列 题目描...

dby_freedom
04/21
0
0
动态规划

动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长非降子序列(LIS) 最大乘积子串 Unique Paths Unique Paths II Minimum Path Sum Triangle 最...

廖少少
2017/09/27
0
0
动态规划算法之:最长公共子序列 & 最长公共子串(LCS)

1、先科普下最长公共子序列 & 最长公共子串的区别: 找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的。而最长公共子序列则并不要求连续。 2、最长公共子串 其实这是一个序贯决...

大数据之路
2013/03/25
0
2
[算法总结] 13 道题搞定 BAT 面试——字符串

本文首发于我的个人博客:尾尾部落 1. KMP 算法 谈到字符串问题,不得不提的就是 KMP 算法,它是用来解决字符串查找的问题,可以在一个字符串(S)中查找一个子串(W)出现的位置。KMP 算法把...

繁著
2018/09/05
0
0
LeetCode算法题-Longest Continuous Increasing Subsequence(Java实现)

这是悦乐书的第286次更新,第303篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第154题(顺位题号是674)。给定未排序的整数数组,找到最长连续增加子序列的长度。例如: 输入...

小川94
03/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

vue预渲染

prerender-spa-plugin 安装prerender-spa-plugin (插件使用见npm官网)[https://www.npmjs.com/package/prerender-spa-plugin] npm install prerender-spa-plugin --save-dev 配置prerender-s......

莫西摩西
38分钟前
1
0
Command模式

https://www.cnblogs.com/devinzhang/archive/2012/01/06/2315235.html

南桥北木
今天
1
0
由于PostgreSQL9.x二进制输出格式默认值改变导致的读取图片错误

今天从社区邮件看到一个这样的问题,感觉很有意思,在这分享给大家~具体如下: 问题现象: 作者有一个很老的Java应用,当时后端采用的PostgreSQL数据库版本为8.x,该系统除了正常的数据增删...

闻术苑
今天
2
0
导入sql时出现Invalid default value for 'create_time'报错处理方法

当运行SQL会出现:[Err] 1067 - Invalid default value for 'create_time',是因为Mysql版本不同,如果版本不 < 5.6请去的话报错的处理方法如下: 方法 :alter table table_name modify cre......

writeademo
今天
1
0
对ssm(spring,springmvc,mybatis)的了解总结

ssm框架现在是java web开发的三个主流框架 ,其实严格来算只算是两个框架,因为springmvc属于spring框架 ,是spring的一个mvc子框架 那么我们下面就来了解一下三大框架把 一 .Spring spring...

咸鱼-李y
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部