第28章:最大连续乘积子串

-2.5 4 0 3 0.5 8 -1Ans:(3,0.5,8)

template<typenameComparable>

Comparable maxprod(constvector<Comparable>& v)

{

int i;

Comparable maxProduct =1;

Comparable minProduct =1;

Comparable maxCurrent = 1;

Comparable minCurrent =1;

for(inti=0;i<v.size();i++)

{

maxCurrent *= v[i];

minCurrent *= v[i];

if(maxCurrent >maxProduct)

maxProduct =maxCurrent;

if(minCurrent >maxProduct)

maxProduct =minCurrent;

if(maxCurrent <minProduct)

minProduct =maxCurrent;

if(minCurrent <minProduct)

minProduce =minCurrent;

if(minCurrent >maxCurrent)

Swap(maxCurrent,minCurrent);

if(maxCurrent < 1)

maxCurrent = 1;

return maxProduct;

}

}

*直接用动态规划求解

状态转移方程:max表示以a结尾的最大连续子串

Max = max{a,Max[i-1]*a,Min[i-1]*a};

Min =min{a,Max[i-1]*a,Min[i-1]*a};

C++代码:

double func(double* a ,constint n)

{

double* maxA = newdouble[n];

double* minA = newdouble[n];

msxA[0] = min[A] = a[0];

double value = maxA[0];

for(int i=1;i<n;i++)

{

maxA[i] =max(max(a[i],maxA[i-1]*a[i]),minA[i-1]*a[i]);

minA[i] =min(,min(a[i],maxA[i-1]*a[i]),minA[i-1]*a[i]);

vlaue =max(value,maxA[i]);

}

delete [] maxA;

delete [] minA;

return value;

}

时间: 2024-10-18 01:12:56

第28章:最大连续乘积子串的相关文章

最大连续乘积子串

1 /* 2 A="2,9,-1,3,7,0,8,9,-3",求最大连续乘积子串,有三种方法,方法一:采用动态规划方法,最容易理解,也最容易实现,方法二:同样采用动态规划的 3 思路,但是不用保存两个数组空间.方法三:采用记录最大值,最小值的方法 4 */ 5 6 /* 7 动态规划方法,,两个数组,最大和最小,max[i]以i结尾的序列中最大连续乘积. 8 maxnum[i]=max{maxnum[i-1]*A[i],minnum[i-1]*A[i],A[i]}; 9 minnum[

动态规划题目(三)——最大连续乘积子串

动态规划题目(三)--最大连续乘积子串 1. 题目描述 给一个浮点数序列,取最大乘积连续子串的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积连续子串为3,0.5,8.也就是说,上述数组中,3 0.5 8这3个数的乘积30.58=12是最大的,而且是连续的. 2. 动态规划求解 动态规划求解题目的时候最重要的是要找到状态转移方程! 针对这道题目,我们使用两个变量记录当前最大值maxEnd, 和当前最小值minEnd.为什么记录当前最小值呢?因为数组中会出现负数,乘以一个负数的话

算法学习(十二)最大连续乘积子串、字符串编辑距离

最大连续乘积子串 题目描述:给一个浮点数序列,取最大乘积连续子串的值,例如-2.5,4,0,3,0.5,8,-1,则取出的最大乘积子串为3,0.5,8.也就是说,上述数组中,3,0.5,8这3个数的乘积3*0.5*8 = 12是最大的,而且是连续的. 分析: 注意子串和字序列的区别. 子串:是串的连续的部分. 子序列:是串中不改变顺序,但是是去掉个别元素的到新的序列. 1,连续数的乘积,最简单的就是穷举法,就是区间[i-j]之间的数的乘积,和最大值max比较,最后输出max.但是时间复杂度很大几

spoj687 后缀数组重复次数最多的连续重复子串

REPEATS - Repeats no tags A string s is called an (k,l)-repeat if s is obtained by concatenating k>=1 times some seed string t with length l>=1. For example, the string s = abaabaabaaba is a (4,3)-repeat with t = aba as its seed string. That is, the

LeetCode -- 最大连续乘积子序列

问题描写叙述: 给定数组,找出连续乘积最大值的子序列.比如 0,-1,-3.-2.则最大连续乘积为6= (-3) * (-2) 实现思路此题与最大连续和的子序列问题相似,也可通过找到递推公式然后用DP来解.关键在于求公式的过程要考虑到元素可能为负的情况.如果元素都为正数的话,DP公式为:dp[i] = max(a[i],dp[i-1]*a[i]) ,乘或不乘,取最大的那个可元素可能为负数.因此能够使用min和max分别存当前最大值和最小值,如果当前元素为负数的话,当前最小值就成了最大值.这样一来

连续递增子串最长长度的数学期望

参考 [1]: longest consecutive subsequence of a random permutation     第一个帖子:         Theorem: The expected length of the longest increasing block in a random permutation of {1,2,…,n} is r0(n)+O(1) as n→∞, where r0(n) is the smallest positive integer su

找出所有最长连续重复子串及其个数

问题描述: 找出字符串中所以最长连续重复子串及其个数 比如:输入:123234,最大连续重复字符串为23,个数为2 输入:5555,最大连续重复字符串为555,个数为2 输入:aaabbb 最大连续重复字符串为aa,个数为2:和bb,个数为2 必须存在重复的字符串才算,只出现一次的不算.可能存在多个相同长度的不同字符串,比如aaabbb. 分析:最直接的想法是利用两个指针循环遍历比较所有可能的子串,记录下所有子串长度,然后找到所有最大连续子串及其个数,时间复杂度为O(n^2).在网上看到一种利用

两个字符串的最长连续公共子串

LCS(Longest Common Subsequence) 就是求两个字符串最长公共子串的问题.引入: LCS(Longest Common Subsequence) 就是求两个字符串最长公共子串的问题. 比如: String str1 = new String("adbccadebbca");  String str2 = new String("edabccadece");str1与str2的公共子串就是bccade. 解法就是用一个矩阵来记录两个字符串中所

第28章 CSS3多列布局

第 28章 CSS3多列布局学习要点:1.早期多列问题2.属性及版本3.属性解释 本章主要探讨 HTML5中 CSS3提供的多列布局,通过多列布局我们方便的创建流体的多列布局.一.早期多列问题我们有时想布局成报纸.杂志那样的多列方式(至少两列,一般三列以上),但早期CSS提供的布局方式都有着极大的限制.如果是固体布局,那么使用浮动或定位布局都可以完成.但对于流体的多列,比如三列以上,那只能使用浮动布局进行,而它又有极大的限制.因为它是区块性的,对于动态的内容无法伸缩自适应,基本无能力.//五段内