问题描述

  给定一个整数序列(可能有正数,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;

  }

转载于:https://www.cnblogs.com/52bokeyuan1314/p/3356782.html

[C++]最大连续子序列乘积相关推荐

  1. 最大连续子序列乘积(DP)

    题目来源:小米手机2013年校园招聘笔试题题目描述: 给定一个浮点数序列(可能有正数.0和负数),求出一个最大的连续子序列乘积. 输入: 输入可能包含多个测试样例. 每个测试样例的第一行仅包含正整数 ...

  2. 最大子序列求和_连续子序列最大和与乘积问题的分析

    问题描述 给定(可能是负的)整数序列A1, A2,...,AN, 寻找(并标识)使Sum(Ak)(k >=i, k <= j)的值最大的序列.如果所有的整数都是负的,那么连续子序列的最大和 ...

  3. HDU 1231 最大连续子序列

    最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  4. 最大连续子序列(dp)

    Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...,  Nj },其中 1 <= i < ...

  5. 最大连续子序列和-动态规划

    题目描述: 给定K个整数的序列{ N1, N2, -, NK },其任意连续子序列可表示为{ Ni, Ni+1, -, Nj },其中 1 <= i <= j <= K.最大连续子序 ...

  6. [数字技巧]最大连续子序列和

    最大连续子序列和这个问题是一个比较常见的问题,出现在很多公司的面试笔试中.题目大概是这样描述的: 输入一个整形数组,数组中有正数也有负数,数组中连续一个或多个组成一个子序列,每个子序列都有一个和,求所 ...

  7. 四种方法解决最大连续子序列和问题

    四种方法解决最大连续子序列和问题 参考文章: (1)四种方法解决最大连续子序列和问题 (2)https://www.cnblogs.com/AlvinZH/p/6795647.html 备忘一下.

  8. 九度OJ 1011:最大连续子序列 (DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5615 解决:2668 题目描述: 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...

  9. 最小正连续子序列和 问题

    2019独角兽企业重金招聘Python工程师标准>>> 给你一个数组a[1...n],求最小正连续子序列和 这个问题不能用dp解,因为不具有最优子结构.只能尝试其他方法. 常用定义, ...

  10. HDU 1231 最大连续子序列:水dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231 题意: 给你一个整数序列,求连续子序列元素之和最大,并输出该序列的首尾元素(若不唯一,输出首坐标 ...

最新文章

  1. 嵌入式Linux的OTA更新,基础知识和实现
  2. sql SET DATEFORMAT对日期处理的影响
  3. minio分布式搭建_分布式存储Minio集群环境搭建
  4. 【kibana】kibana node 监控指标 详解
  5. python接口自动化(六)--发送get请求接口(详解)
  6. 记一次获得 3 倍性能的 go 程序优化实践,及 on-cpu / off-cpu 火焰图的使用
  7. 疫情,降薪,跳槽工作难找,任务重加班多,程序员的出路在何方?
  8. 1019. General Palindromic Number (20)
  9. axios发post请求,后端接收不到参数的问题
  10. elementui表格列宽自适应_Java 操作Word表格——创建嵌套表格、添加复制表格行或列...
  11. 自定义getElementByClass
  12. app抓包工具_【旧版IPA抓包教程2】超便捷苹果旧版本APP抓包/轻松抓取你想要的版本,旧版app任意下载...
  13. python语言磁力搜索引擎源码公开,基于DHT协议
  14. php mysql 连接池_php 如何实现 数据库 连接池
  15. android捕获按键广播,Android 解决监听home键的几种方法
  16. uniapp 前端获取历史搜索记录
  17. RCLAMP0524P超低电容TVS二极管阵列,DFN-10L封装
  18. Marvell 88E1111 百兆工程 (FPGA)
  19. SpringCloud整合Sa-Token登录认证+Gateway网关拦截
  20. 最近瞎忙,比较懒撒,所以要收收心,该学习的学习。

热门文章

  1. ES6的类Class基础知识点
  2. java动态代理模式
  3. iOS开发 -- 发送JSON数据给服务器
  4. 我所认为的KVC和KVO
  5. 8086 MOV 指令的注意事项
  6. 学用 ASP.Net 之 System.Collections.Specialized.StringDictionary 类
  7. Android 10系统新特性解读
  8. redis 实验(八)可视化监控RedisLive
  9. Linkedin Camus,从Kafka到HDFS的数据传输管道
  10. VB模拟键盘输入的N种方法