最大连续子序列乘积

来源:互联网 发布:java好书推荐 编辑:程序博客网 时间:2024/05/16 07:41

问题描述

给定一个整数序列(可能有正数,0和负数),求它的一个最大连续子序列乘积。比如给定数组a={3, -4, -5, 6, -2},则最大连续子序列乘积为720,即3*(-4)*(-5)*6=720。


分析

求最大连续子序列乘积与最大连续子序列和问题有所不同,因为其中有正有负还有可能有0。

假设数组为a[],直接利用动归来求解,考虑到可能存在负数的情况,我们用Max[i]来表示以a[i]结尾的最大连续子序列的乘积值,用Min[i]表示以a[i]结尾的最小的连续子序列的乘积值,那么状态转移方程为:

       Max[i]=max{a[i], Max[i-1]*a[i], Min[i-1]*a[i]};
       Min[i]=min{a[i], Max[i-1]*a[i], Min[i-1]*a[i]};
初始状态为Max[0]=Min[0]=a[0]。代码如下:
#include"iostream"    using namespace std;    int max3(int a,int b,int c){int t = a>b?a:b;return t>c?t:c;}int min3(int a,int b,int c){int t = a<b?a:b;return t<c?t:c;}int max_multiple(int *a,int n)  {  int *Min = new int[n]();  int *Max = new int[n]();  Min[0]= Max[0] = a[0];   int max = Max[0];  for(int i=1; i<n; i++){  Max[i] = max3(Max[i-1]*a[i],Min[i-1]*a[i],a[i]); //求三个数中最大值  Min[i] = min3(Max[i-1]*a[i],Min[i-1]*a[i],a[i]); //求三个数中最小值  if(max < Max[i])  max = Max[i];  }  //内存释放  delete [] Max;  delete [] Min;  return max;  }  //不保存中间变量的实现方法int max_multiple_2(int *a,int n)  {  int minsofar, maxsofar, max;  max = minsofar = maxsofar = a[0];  for(int i=1;i<n;i++){  int maxhere = max3(maxsofar*a[i], minsofar*a[i], a[i]);  int minhere = min3(maxsofar*a[i], minsofar*a[i], a[i]);  maxsofar = maxhere;minsofar = minhere;  if(max < maxsofar)  max = maxsofar;  }  return max;  }  int main(){int a[]={3, -4, 0, 6, -2};cout<<max_multiple_2(a,5)<<endl;system("pause");return 0;}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 两岁宝宝说有鬼怎么办 阳台改成了卧室晒衣服怎么办 室外墙角边墙泥受潮脱落怎么办 新房装修墙体发霉了怎么办 宝宝吃多了发烧怎么办 宝宝睡觉不爱盖被子怎么办 1岁宝宝不盖被子怎么办 2岁宝宝不盖被子怎么办 买的芬琳漆不够刷的怎么办 1.3米宽厨房门怎么办 墙面漆颜色刷深了怎么办 地板上沾了墙漆怎么办 孩子连发高烧8天了怎么办 孩子对数字不敏感怎么办 三岁宝宝不爱学习怎么办 5岁还不认识数字怎么办 小孩上中班还不认识数字怎么办 中班小孩数字都不认识怎么办 中班小孩记不住数字怎么办 中班小孩不肯练数字描红怎么办 2个月吃母乳婴儿缺钙怎么办 月经期接吻水多怎么办 4岁宝宝晚上尿多怎么办 2岁宝宝晚上尿多怎么办 3岁宝宝晚上尿多怎么办 宝宝拉肚子拉绿色的屎怎么办 婴儿吃奶粉大便干燥怎么办 母乳宝宝不拉大便怎么办 我儿子8岁拉肚子怎么办 1岁宝宝经常便秘怎么办 两个月宝宝拉水怎么办 宝宝吃奶粉上火便秘怎么办 20多天的宝宝便秘怎么办 宝宝五十天消化不良不拉屎怎么办 一周七个月宝宝消化不良拉屎怎么办 孩子总是消化不良拉屎不成型怎么办 一岁宝宝长牙慢怎么办 一岁宝宝不喝水怎么办 七个月的宝宝咳嗽怎么办 怀孕七个月感冒了怎么办 苹果汁弄到白色衣服怎么办